构建爬虫代理池

proxypool

proxypool是一个自动抓取免费代理并检测入库的程序,并提供开放的实时API服务:proxypool-open-WebAPI 
欢迎Star/Fork

使用

本项目采用python3进行开发,建议使用virtualenv

# 下载源码
git clone https://github.com/SimpleBrightMan/proxypool.git
cd proxypool
# 安装依赖
pip install -r requirements.txt
# 爬虫运行
python proxy_spider.py
# 重新验证
python check_proxy.py

如果正常可以出现如下的截图: 
- 爬虫运行

爬虫运行
- 重新验证

重新验证

WebAPI

# 启动webAPI
python webAPI.py 8080

此时访问http://127.0.0.1:8080就可以调用WebAPI了.

另外,我在阿里云上部署了这个项目,每隔6小时会定时自动抓取/重新验证一遍代理,开放的API地址为:proxypool-open-WebAPI

API使用说明

URL : http://127.0.0.1:8080 or http://proxy.nghuyong.top

Method : GET

Return : json格式,形如:

{
    num: 692,
    updatetime: "2017-10-15 22:49:16",
    data: [
        {
            type: "http",
            round_trip_time: 1.38,
            ip_and_port: "181.193.73.18:53281",
            country: "Costa Rica",
            anonymity: "transparent"
        },
        {
            type: "http",
            round_trip_time: 0.52,
            ip_and_port: "113.214.13.1:8000",
            country: "China",
            anonymity: "high_anonymity"
        },
        {
            type: "http",
            round_trip_time: 0.58,
            ip_and_port: "159.82.166.133:8080",
            country: "United States",
            anonymity: "normal_anonymity"
        },
        ...
    ]
}
  •  

返回json参数说明:

参数类型说明
numint返回代理IP的总数
updatetimechar最后一次更新时间
datalist代理IP数据
typechar该代理的类型
round_trip_timedouble针对测试网站使用该代理请求往返时间
ip_and_portchar代理的IP和端口
countrychar代理所在的国家
anonymitychar代理的匿名情况:transparent:透明;normal_anonymity:匿名;high_anonymity:高匿

请求的参数举例说明: 
- / : 将返回数据库中的所有代理 
- /?country=China :针对国家的条件进行结果过滤 
- /?type=http :针对代理类型进行结果过滤 
- /?anonymity=normal_anonymity :将返回匿名程度大于等于查询条件的代理,其中transparent

在你的爬虫项目中使用该WebAPI

import requests
# 请求API,并解析json成dictionary
proxy_result = requests.get("http://proxy.nghuyong.top").json()
num = proxy_result['num']
updatetime = proxy_result['updatetime']
proxy_data = proxy_result['data']
# 获取其中一个代理
one_proxy = proxy_data[0]
# 爬虫加上代理
requests.get("http://www.baidu.com",proxies={"http":one_proxy['type']+"://"+one_proxy['ip_and_port']})

项目框架说明

  • log.py : 项目日志模块,提供三种日志处理方式:1)一般日志打印到控制台 2)一般日志写入到文件,每天进行日志分割,并可以通过web查看日志 3)严重的错误日志邮件通知

  • db.py : 数据库的相关操作,采用sqlite3数据库,并通过peewee实现ORM操作。

  • webAPI.py: 通过web.py开发webAPI接口。

  • spider/**_spider.py:针对不同免费代理IP网站的爬虫抓取,都继承自base_spider.py,有相同的运行接口,主要是重写网页解析函数。

  • proxy_spider.py:主代理爬虫入口,调用子爬虫,通过gevent实现代理抓取,检验和入库。

  • check_proxy.py:主验证代理入口,定时重新验证数据库中的代理是否可用,不可用则移除。

定时任务设置

通过crontab设置定时任务,进行定时的代理抓取和验证。由于项目在virtualenv环境的运行,所以可以编写一个脚本,先进入虚拟环境,在执行程序。

crontab_shell.sh

!/bin/bash
cd /path/to/virtualenv
source ./bin/activate
cd /path/to/project
/path/to/virtualenv/bin/python3.4 /path/to/project/proxy_spider.py
/path/to/virtualenv/bin/python3.4 /path/to/project/check_proxy.py
deactivate

再通过 crontab -e设置:

# m h  dom mon dow   command
0 0,6,12,18 * * * sh /path/to/crontab_shell.sh

这样,每隔6小时就会自动运行一次!

转载于:https://blog.csdn.net/nghuyong/article/details/78415048

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值