当前位置: 移动技术网 > IT编程>脚本编程>Python > [爬虫]一个易用的IP代理池

[爬虫]一个易用的IP代理池

2019年12月18日  | 移动技术网IT编程  | 我要评论

大连星海影院,凡客体生成器,宠物王爷坏坏妃

一个易用的ip代理池 - stand

写爬虫时常常会遇到各种反爬虫手段, 封 ip 就是比较常见的反爬策略

遇到这种情况就需要用到代理 ip, 好用的代理通常需要花钱买, 而免费的代理经常容易失效, 所以就需要自己搭建 ip 代理池, 来获取免费高效的代理 ip. 下面介绍一个自己写的 ip 代理池, 欢迎 star

安装

pip install stand

启动

stand

启动后, 爬虫会从代理网站抓取 ip, 并将数据保存在名为 stand.db 的 sqlite 数据库中, 等待爬虫抓取一定数量 ip 后, 即可使用代理

使用

>>> from stand import get_proxy
>>> proxy = get_proxy()
>>> print(proxy)
'103.133.222.151:8080'

在 scrapy 中使用 stand 作为代理

import scrapy
from scrapy.crawler import crawlerprocess


class testspider(scrapy.spider):
    name = 'test'
    start_urls = ['https://api.ip.sb/ip']

    def parse(self, response):
        print(response.meta['proxy'])
        print(response.text)


downloader_middlewares = {
    'stand.useragentmiddleware': 543,
    'stand.proxymiddleware': 600,
}
settings = dict(
    log_enabled=false,
    download_timeout=30,
    downloader_middlewares=downloader_middlewares,
)


def run():
    process = crawlerprocess(settings)
    process.crawl(testspider)
    process.start()


if __name__ == "__main__":
    run()

项目说明

  1. 当启动 stand 时, 首先会运行 crawl 函数从代理网站爬取代理 ip, 并将爬取到的结果存储在名为 stand.db (可通过 stand_dir 环境变量设置保存目录) 的 sqlite 数据库中, 每个 ip 有一个初始分数 2
  2. 然后会运行 validate 函数验证代理 ip 的有效性, 验证通过分数设置为最高值 3, 验证失败分数减 1, 当分数为 0 时删除该 ip
  3. 之后会定时运行 crawl 和 validate 函数分别爬取和验证 ip, 每20分钟爬取一次 ip, 每60分钟验证一次 ip

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网