一个靠爬虫赚钱的思路,无偿分享

2023-11-04 03:00

本文主要是介绍一个靠爬虫赚钱的思路,无偿分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天早上登录我的虚拟机,发现速度慢得出奇。每次运行命令,都要等好一段时间才能看到结果。就如 cat 一个文件的内容这种命令,都要等好一会儿。查看CPU使用率、内存使用率,都很正常。但查看网络连接的时候,发现有好多人连到我的3128端口。


熟悉代理服务器的朋友们知道,3128是squid的默认端口。之前我在虚拟机上配了一个squid,本来是自己用的,因为没有设用户名密码,这两天被别人扫出来,作为公共的代理被用了。于是我停掉squid服务,果然,一下子虚拟机的速度就回复正常了。

但是问题来了,是谁在用我的代理呢?

其实猜也才能猜到,一定是那些代理提供商扫出了我的机器,然后把我的代理提供给他们的用户。我拿我的IP去百度了一下,果然发现被一些代理提供商收录了。

进一步深入思考一下,代理提供商是怎么扫到我的代理的呢?

扫代理的原理其实很简单,就是扫描一个网络中的服务器,扫出那些启用代理服务的机器,测试它们是哪种类型的代理(透明代理、匿名代理还是高匿代理),然后代理提供商将这些代理提供给它的客户。


这么想想,其实做一个代理提供商也不是很难。那这样,我们不是自己也可以扫描代理,把资源卖给有需要的客户了?


顺着上面的思路,我整理了一下自己搭建这样一个服务涉及的几个步骤,列了几个关键点。



扫描代理服务器

扫端口我们可以用 nmap 这个工具。nmap 是一个网络扫描的工具,它可以用来扫描对方服务器启用了哪些端口、哪些服务,服务器是否在线,以及猜测服务器可能运行的操作系统。

我们针对一台机器运行 nmap 命令,可以扫出这个机器启用了哪些端口(服务),比如

$ nmap 49.51.193.128	Starting Nmap 7.01 ( https://nmap.org ) at 2019-03-09 20:32 CST	
Nmap scan report for 49.51.193.128	
Host is up (0.18s latency).	
Not shown: 995 closed ports	
PORT     STATE    SERVICE	
22/tcp   open     ssh	
25/tcp   filtered smtp	
111/tcp  open     rpcbind	
445/tcp  filtered microsoft-ds	
1080/tcp open     socks	Nmap done: 1 IP address (1 host up) scanned in 27.34 seconds

要扫出一个网段中的代理服务器,我们可以针对一个网段作扫描,如下

$ nmap 49.51.193.0/24

上面的命令会扫出所有在 49.51.193.0/24这个网段中有哪些在线的机器,每台机器上启用了哪些服务。


检测代理类型


扫出来代理服务器后,我们可以对这些代理服务器做测试,看看它们是什么类型的代理。

代理基本上分成这三种类型:

  • 透明代理

  • 匿名代理

  • 高匿代理

通过字面意思,大致能猜到这三种代理的区别。简单的说,透明代理就是用了之后,对方服务器很清楚的知道你是谁,你来自哪个IP。匿名代理用了之后,对方没法知道你是谁,但是知道你用了代理。而高匿代理比匿名代理隐藏性更高,对方不仅不知道你是谁,也不知道你用了代理。

三者在技术层面的区别,主要在于HTTP请求头的内容不同


透明代理

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Your IP

匿名代理

REMOTE_ADDR = proxy IP

HTTP_VIA = proxy IP

HTTP_X_FORWARDED_FOR = proxy IP

高匿代理

REMOTE_ADDR = Proxy IP

HTTP_VIA = not determined

HTTP_X_FORWARDED_FOR = not determined

检测代理类型的方法也非常简单,只需要自己搭建一个web服务器,在上面跑一个web程序。客户端通过代理向web服务器发起请求,web程序打印出请求头,通过分析请求头的内容就可以知道这个代理是哪种类型的。


下面是我用 Flask 写了一个例子,大致是这么个意思

import json	
from flask import Flask, request	app = Flask(__name__)	@app.route('/')	
def hello():	header = {}	if "REMOTE_ADDR" in request.headers:	header["REMOTE_ADDR"] = request.headers["REMOTE_ADDR"]	if "HTTP_VIA" in request.headers:	header["HTTP_VIA"] = request.headers["HTTP_VIA"]	if "HTTP_X_FORWARDED_FOR" in request.headers:	header["HTTP_X_FORWARDED_FOR"] = request.headers["HTTP_X_FORWARDED_FOR"]	return json.dumps(header)	if __name__ == "__main__":	app.run(host="0.0.0.0", port=8080)

运行这个程序,当我们通过代理访问这个web服务,它就会返回代理请求头的信息,我们可以据此判断代理是透明、匿名还是高匿代理。



维护代理池


好,有了代理和代理的类型,我们可以将他们做成一个代理池,提供一个接口给客户,让他们通过接口来获取可用的代理。


当然这些扫出来的代理有效时间长短不一,有的代理也许可以用很久,有的代理可能一会儿时间就失效了。我们需要保证代理池中的代理是有效的,可以定期的去检查代理的有效性,把失效的从列表中去除,把新的有效的加入进来。


当我们做出了这样一个接口后,我们可以把这个接口打包成服务卖给客户,比如按照调用次数收费或者按月收费。


市面上,对于代理池的需求还是很大的,主要是爬虫用户,有些公司也需要爬取竞争对手网站的数据来做分析。用代理池可以避免短时间内请求次数太多而被封掉的情况,当然对于公司来说,除了这方面因素,也想隐藏自己的IP来源,不让竞争对手发现自己的意图。


以上是一个赚钱项目的思路,分享给大家。



推荐阅读:

用Python做垃圾分类




昨天的混脸熟中奖读者是:「暖阳」请于今天22:00前联系我哦~

640?wx_fmt=png

今天混脸熟的规则是:你觉得目前垃圾分类最缺少的是哪个环节?

今天送这本书:《Python 3.x 全栈开发从入门到精通》

640?wx_fmt=png



推荐阅读:

用Python做垃圾分类

昨天的

这篇关于一个靠爬虫赚钱的思路,无偿分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/342768

相关文章

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试