Skip to content

ourcubk/ipproxy

This branch is 7 commits behind jiehua233/ipproxy:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b860aa7 · Jan 2, 2016

History

19 Commits
Dec 17, 2015
Jan 1, 2016
Jan 2, 2016
Dec 21, 2015
Jan 2, 2016
Jan 1, 2016
Jan 2, 2016
Dec 17, 2015
Dec 17, 2015

Repository files navigation

代理IP抓取

求 star ⭐️ (没错,我就是这么厚脸皮......)

原理说明

通过在网络上爬取公开的代理ip,同时在本地进行代理测试,提取可用的代理IP,并记录其网络延时,最后将结果保存到文件以及redis zset(可选).

代理IP分为三个匿名等级:高匿, 普匿, 透明; 程序中以3, 2, 1标记, 0:未知.

使用方法

新建python虚拟环境

$ virtualenv ~/virtualenv/ipproxy
$ source ~/virtualenv/ipproxy/bin/activate
$ pip install -r requirements.txt

修改配置文件 etc/config.py

$ cp etc/config.sample.py etc/config.py
$ vim etc/config.py
SNIFFER = {
    'PROCESS_NUM': 4,                   # 开启进程数
    'THREAD_NUM': 500,                  # gevent线程数
    'PROXY_TYPE': [0, 1, 2, 3],         # 指定代理IP匿名程度
    'TARGET': 'http://www.baidu.com',   # 测试代理IP的目标
    'TIMEOUT': 10,                      # 测试延时
    'OUTPUT': True,                     # 是否将结果输出到文件(`data/`)
    'BACKEND': 'localhost:6379',        # 是否将结果保存到redis(不保存则为'')
    'KEY_PREFIX': 'ipproxy:',           # redis key前缀
}

LOGGER = {
    "PATH": './ipproxy.log'             # 程序日志
}

启动脚本

$ python main.py
# 抓取过程的日志保存在 ipproxy.log
$ tail -f ipproxy.log

注意:运行过程中并没有将结果实时保存到到文件,而是最后才统一写入到文件和redis,因此请耐心等待其运行完毕。

抓取结果

结果默认以纯文本形式保存在 data/ 目录下,格式为 ip\tspeed,第二列数值表示代理请求延时

120.132.95.8:8080	0.0899851322174
219.136.252.120:80	0.0968101024628
59.49.35.51:80	0.109569072723
123.126.108.190:3128	0.136920213699
111.205.46.26:80	0.137912988663
106.3.37.223:80	0.146553039551
......

如果只需ip,简单操作:

$ cut -f 1 data/ipproxy-1.txt > data/ip-1.txt

如果在etc/config.py中设置了BACKEND,则结果也将保存到redis zset方便其他程序使用,具体参考如下示例。

redis-cli中可通过如下命令查看,默认KEY_PREFIX=ipproxy:

$ redis-cli
127.0.0.1:6379> keys ipproxy:*
1) "ipproxy:1"
2) "ipproxy:3"
3) "ipproxy:2"

127.0.0.1:6379> zcard ipproxy:1
(integer) 787

127.0.0.1:6379> zrange ipproxy:1 0 787
1) "203.195.162.96:8080"
2) "123.54.6.37:8000"
3) "117.177.250.146:8081"
4) "117.177.250.146:8080"
5) "202.108.23.231:80"
6) "195.167.216.50:80"
7) "124.206.133.227:80"
8) "183.239.173.138:8080"
9) "91.121.139.227:80"
10) "168.213.3.106:80"
11) "61.136.247.238:3128"
......

示例

示例中简单示范了如何使用存储在redis zset中的代理ip

参考 `example`

抓取优化tips

优化主要是通过对etc/config.py的合理配置来提高代理ip的可用性:

  • 修改TARGET可以使抓取到的代理ip更具针对性和有效性

比如想通过代理ip来批量注册某网站http://mail.abc.com邮箱,可以将TARGET设置为http://mail.abc.com,这样可以保证抓取到的ip对该网站都是可访问的

  • 修改TIMEOUT设置超时

根据自己的需求,设置一个可容忍的请求延时,设置较大时,可以抓取到更多代理IP(但也会导致抓取速度大大下降);设置较小时,抓取到的代理ip数量将会减少

  • 修改PROXY_TYPE

通过这个选项可以限制抓取的代理ip类型(透明,普匿,高匿),请根据自己的需求设置,这个选项并不保证抓取的代理ip绝对归属于某个类型,比如虽然设置了高匿,但抓取到的ip仍然可能是其他类型(小概率)

  • 修改PROCESS_NUMTHREAD_NUM

修改启动的进程数和线程数,越大速度越快,但也取决于你的电脑配置和网络状态等因素

数据源

每日更新

实时更新

CHANGELOGS

v 0.2.2

  • 抓取过程中在STDOUT中输出部分日志信息,避免假死

v 0.2.1

  • 更新README,修复部分小bug
  • 更新example示例

v 0.2.0

  • 代码重构,调整了各个模块目录
  • 加入了multiprocessgevent来提高抓取效率
  • 独立配置文件,用户可根据自己的需要调整相应参数来抓取到更加有效的代理ip
  • 抓取结果保存到纯文本和redis(可根据自己实际需要选择,非必须)
  • 去掉了部分已经失效的公开代理源,增加新的源
  • 加入log,打印到文件ipproxy.log

v 0.1.0

  • 完成了基本的抓取功能
  • 数据保存在redis zset

About

代理IP抓取

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%