Giter VIP home page Giter VIP logo

ipproxy's Introduction

代理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

ipproxy's People

Contributors

jiehua233 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.