This repository was archived by the owner on Oct 28, 2023. It is now read-only.
- Notifications
You must be signed in to change notification settings - Fork159
getproxy 是一个抓取发放代理网站,获取 http/https 代理的程序
License
NotificationsYou must be signed in to change notification settings
fate0/getproxy
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
getproxy 是一个抓取发放代理网站,获取 http/https 代理的程序,每 15 min 会更新数据至fate0/proxylist
pip install -U getproxy
➜ ~ getproxy --helpUsage: 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) ➜ ~ getproxyINFO:getproxy.getproxy:[*] InitINFO:getproxy.getproxy:[*] Current Ip Address: 1.1.1.1INFO:getproxy.getproxy:[*] Load input proxiesINFO:getproxy.getproxy:[*] Validate input proxiesINFO:getproxy.getproxy:[*] Load pluginsINFO:getproxy.getproxy:[*] Grab proxiesINFO:getproxy.getproxy:[*] Validate web proxiesINFO:getproxy.getproxy:[*] Check 6666 proxies, Got 666 valid proxies...
每一行结果都是一个 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 | 来源 |
classProxy(object):def__init__(self):self.result= []self.proxies= []defstart(self):pass
{ "host": "1.1.1.1", "port": 8080, "from": "plugin name"}
- 不要在 plugin 内使用多线程、gevent 等方法
- 如果目标网站存在分页,请在获取每页内容之后,自行添加 delay
- 如果目标网站存在分页,请在获取每页结果之后,及时放入
self.result
中 - 如果被目标网站 ban 了,可以利用已经验证的 proxies (也就是
self.proxies
)
直接运行getproxy
等同于执行下面程序:
#! /usr/bin/env python# -*- coding: utf-8 -*-fromgetproxyimportGetProxyg=GetProxy()# 1. 初始化,必须步骤g.init()# 2. 加载 input proxies 列表g.load_input_proxies()# 3. 验证 input proxies 列表g.validate_input_proxies()# 4. 加载 pluging.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)
- 为什么不使用 xxx 数据库?
数据量并不大,就算用文本格式全读进内存,也占用不了多少内存,就算真的需要存储至数据库,自己再多写几行代码就搞定。另外使用文本格式还有另外一个好处是可以创建这个项目fate0/proxylist
- 和 xxx 有什么区别?
简单、方便、快捷,除了 Python 环境,其他都不用设置。
- 报错啦,怎么办?
仔细看看错误信息,是不是一些 plugin 报错误,而且错误都是和网络相关的?如果是的话,可能这些 plugin 访问的网站由于众所周知的原因被 block 了。如果不是,赶紧提 Issue。
- 还继续添加新的 plugin 吗?
主要看这个项目fate0/proxylist 中的proxy.list
数量,如果proxy.list
行数接近 5000 个,那就不再继续添加新的 plugin,防止 travis 15min 内不结束。