Skip to content
getproxy 是一个抓取发放代理网站,获取 http/https 代理的程序
Python
Branch: master
Clone or download
Latest commit 9b86833 Sep 22, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
getproxy Move gevent patch to header Sep 22, 2018
.gitignore init Jun 16, 2017
.travis.yml Update .travis.yml Jun 23, 2018
LICENSE init Jun 16, 2017
MANIFEST.in restart project Aug 1, 2017
README.md restart project Aug 1, 2017
requirements_dev.txt init Jun 16, 2017
setup.cfg restart project Aug 1, 2017
setup.py Update setup.py May 30, 2018
tox.ini restart project Aug 1, 2017

README.md

getproxy

Build Status Updates PyPI PyPI

getproxy 是一个抓取发放代理网站,获取 http/https 代理的程序, 每 15 min 会更新数据至 fate0/proxylist

1. 安装

pip install -U getproxy

2. 使用

帮助信息

➜  ~ getproxy --help
Usage: getproxy [OPTIONS]

Options:
  --in-proxy TEXT   Input proxy file
  --out-proxy TEXT  Output proxy file
  --help            Show this message and exit.
  • --in-proxy 可选参数,待验证的 proxies 列表文件
  • --out-proxy 可选参数,输出已验证的 proxies 列表文件,如果为空,则直接输出到终端

--in-proxy 文件格式和 --out-proxy 文件格式一致

使用例子

(test2.7) ➜  ~ getproxy
INFO:getproxy.getproxy:[*] Init
INFO:getproxy.getproxy:[*] Current Ip Address: 1.1.1.1
INFO:getproxy.getproxy:[*] Load input proxies
INFO:getproxy.getproxy:[*] Validate input proxies
INFO:getproxy.getproxy:[*] Load plugins
INFO:getproxy.getproxy:[*] Grab proxies
INFO:getproxy.getproxy:[*] Validate web proxies
INFO:getproxy.getproxy:[*] Check 6666 proxies, Got 666 valid proxies

...

3. 输入/返回格式

每一行结果都是一个 json 字符串,格式如下:

{
    "type": "http",
    "host": "1.1.1.1",
    "port": 8080,
    "anonymity": "transparent",
    "country": "CN",
    "response_time": 3.14,
    "from": "txt"
}
属性   类型   描述   可选值  
type str   proxy 类型 http, https
host         str   proxy 地址
port         int   端口
anonymity     str   匿名性 transparent, anonymous, high_anonymous
country str proxy 国家
response_time float 响应时间
from         str   来源

4. Plugin 相关

Plugin 代码格式

class Proxy(object):
    def __init__(self):
        self.result = []
        self.proxies = []

    def start(self):
        pass

Plugin 返回结果

{
    "host": "1.1.1.1",
    "port": 8080,
    "from": "plugin name"
}

Plugin 小提示

  • 不要在 plugin 内使用多线程、gevent 等方法
  • 如果目标网站存在分页,请在获取每页内容之后,自行添加 delay
  • 如果目标网站存在分页,请在获取每页结果之后,及时放入 self.result
  • 如果被目标网站 ban 了,可以利用已经验证的 proxies (也就是 self.proxies)

5. 第三方程序调用

直接运行 getproxy 等同于执行下面程序:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from getproxy import GetProxy

g = GetProxy()

# 1. 初始化,必须步骤
g.init()

# 2. 加载 input proxies 列表
g.load_input_proxies()

# 3. 验证 input proxies 列表
g.validate_input_proxies()

# 4. 加载 plugin
g.load_plugins()

# 5. 抓取 web proxies 列表
g.grab_web_proxies()

# 6. 验证 web proxies 列表
g.validate_web_proxies()

# 7. 保存当前所有已验证的 proxies 列表
g.save_proxies()

如果只想验证 proxies 列表,并不需要抓取别人的 proxies,则可以:

g.init()
g.load_input_proxies()
g.validate_input_proxies()

print(g.valid_proxies)

如果当前程序不需要输出 proxies 列表,而是在程序中直接使用,则可以:

g.init()
g.load_plugins()
g.grab_web_proxies()
g.validate_web_proxies()

print(g.valid_proxies)

6. Q & A

  • 为什么不使用 xxx 数据库?

数据量并不大,就算用文本格式全读进内存,也占用不了多少内存,就算真的需要存储至数据库,自己再多写几行代码就搞定。 另外使用文本格式还有另外一个好处是可以创建这个项目 fate0/proxylist

  • 和 xxx 有什么区别?

简单、方便、快捷,除了 Python 环境,其他都不用设置。

  • 报错啦,怎么办?

仔细看看错误信息,是不是一些 plugin 报错误,而且错误都是和网络相关的? 如果是的话,可能这些 plugin 访问的网站由于众所周知的原因被 block 了。 如果不是,赶紧提 Issue。

  • 还继续添加新的 plugin 吗?

主要看这个项目 fate0/proxylist 中的 proxy.list 数量, 如果 proxy.list 行数接近 5000 个,那就不再继续添加新的 plugin,防止 travis 15min 内不结束。

You can’t perform that action at this time.