V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cocoakekeyu
V2EX  ›  分享创造

中秋发布,写了一个用于 scrapy 爬虫的自动代理中间件

  •  1
     
  •   cocoakekeyu · 2016-09-15 14:04:36 +08:00 · 5160 次点击
    这是一个创建于 2770 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先祝贺大家中秋节快乐。

    用于 scrapy 爬虫的自动代理中间件。一般写爬虫时都可能会遇到被爬取网站拒绝访问等情况,接下来就是想使用代理连接,但是好用的代理收费,免费的代理大部分又连接不上。想到写一个自动抓取和切换代理的中间件来解决,抓取的代理都会进行测试,可设置爬虫抓取的网站来测试代理,保证代理可用性。使用 BeautifulSoup 简单筛选网页的代理,所以需要先安装 BeautifulSoup 。

    中间件地址: https://github.com/cocoakekeyu/autoproxy 里面有一个简单的抓取花瓣网图片爬虫作为测试。

    下面直接照搬README:

    AutoProxyMiddleware

    简介

    一个用于 scrapy 爬虫的自动代理中间件。可自动抓取和切换代理,自定义抓取和切换规则。

    用法

    将中间件模块放置到项目中,并在项目设置文件中添加该中间件。如

    DOWNLOADER_MIDDLEWARES = {
        'projectname.autoproxy.AutoProxyMiddleware': 543,
    }
    

    配置

    可在项目配置文件中使用AUTO_PROXY配置项配置代理中间件。如

    AUTO_PROXY = {
    	'test_urls':[('http://upaiyun.com','online'),('http://huaban.com', '33010602001878')],
    	'ban_code':[500,502,503,504],
    }
    

    所有可用配置

    • 'enable': 一个布尔值,是否启用该中间件。默认为True
    • 'test_urls': 一个二元组的列表,网址+特征码(返回的网页内容中能找到的特定值),用作代理连接的测试。默认为[('http://www.w3school.com.cn', '06004630'), ]
    • 'test_proxy_timeout': 大于 0 的整数,用于测试代理时连接超时设置。默认为5
    • 'download_timeout': 大于 0 的整数,与 scrapy 的download_timeout一样,启用该中间件则设置。默认为60
    • 'test_threadnums': 大于 0 的整数,启动测试代理的线程数。默认为20
    • 'ban_code': 一个列表,代理被禁用的 http 状态码。确认返回状态码在此范围可自动切换代理。默认为[503,]
    • 'ban_re': 正则表达式字符串,代理被禁用返回的页面内容包含匹配正则式的内容,则切换代理,若为空则不启用。默认为r''
    • 'proxy_least': 大于 0 的整数, 若代理池可用数量小于它则自动抓取新的代理。默认为3
    • 'init_valid_proxys': 大于 0 的整数, 初始化爬虫时等待的可用代理数量。数值大会导致初始化比较慢,在爬虫进行中也可以同时测试保存的代理。默认为1
    • 'invalid_limit': 大于 0 的整数,每个代理成功下载到页面时都会对其计数,若突然无法连接或者被网站拒绝将对这个代理进行 invaild 操作,若代理爬取的页面数大于该设置数值,则暂时不 invaild ,切换至另一个代理,并减少其页面计数。默认为200

    最后,可能有意想不到的情况。毕竟失业了。

    3 条回复    2016-10-09 15:34:57 +08:00
    123313
        1
    123313  
       2016-09-16 14:46:51 +08:00
    莫非你就是…………
    cocoakekeyu
        2
    cocoakekeyu  
    OP
       2016-09-16 19:25:02 +08:00
    @123313 是什么⊙ˍ⊙
    BruceWang
        3
    BruceWang  
       2016-10-09 15:34:57 +08:00
    @cocoakekeyu 我猜他想说的是五仁月饼……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1130 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.