Python-Scrapy 个人兴趣教程(三):扫尾

本文介绍了如何使用Python的Scrapy框架配合urllib2进行代理IP的检测,通过多线程提高效率。利用mongodb进行数据交互,并确保线程安全。检测合格的代理IP存储在mongodb中,供其他Scrapy爬虫使用。同时分享了部分源码,鼓励读者尝试解决数据抓取中的IP限制问题。
摘要由CSDN通过智能技术生成

上一篇博文已经完成了代理IP抓取的核心部分,这一篇主要讲一下代理IP的检测。

所谓HTTP代理,检测方法很简单,就是用代理去请求一个网址,看看是否能够拿到正确回应。因为我们抓取IP是周期进行的,所以代理IP的验证也要不停的进行,简单说来就是一个队列的形式,抓取系统不停往队列里扔IP,检测进程不停取出IP进行检测,检测合格的IP放入另一个队列,不合格的直接丢弃。当然,因为代理IP的时效性,存放检测合格的代理IP的队列,自身也需要进行检测维护。


实现方法很简单,Python就是个工具库,利用urllib2的绑定代理功能,可以很简单的完成这个工作,稍微注意一点的就是和mongodb的交互,python上使用pymongo库和mongodb交互,API比较简单。为了提高检测效率,我选择了多线程模式。检测IP看做一个任务,这些任务完全可以并行进行,唯一需要注意的就是取IP和放IP。利用mongodb里一些线程安全的API(find_and _delete),可以避开线程锁的使用。(当然,我没有严格验证是否存在数据冲突,作为练手,这个实现方式足以,而且错误的代价基本忽略)


这个检测的进程不停读取IP队列里的数据,如果读不到了,则sleep一些时间,然后继续尝试读取。

这样一套方案搭建好之后,mongodb里时刻都存有当前30分钟内搜索到代理IP资源,这可以作为其他scrapy的准备资源,妈妈再也不用担心我的IP- -。。


我在测试代理IP的时候,把测试用的网页链接设置成了上一篇博客的地址http://blog.csdn.net/mingz_free/article/details/45967725。。。于是乎。。。。

这个博客的阅读量就飞起来了。。。我没有恶意刷点击量的意思。。求别封我的博客- -。。


附上部分源码:

scan.py

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

USAGE = """This is s special daemon used for checking whether the IP proxy works.
It 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值