为了避免爬虫被封 IP ,网上搜索教程说需要建立代理池。但是付费代理都好贵。。。不过好在网上已经有不少免费提供代理的网站了。因此,我打算写个爬虫去获取这些免费 IP ~
策略步骤
用种子关键词例如“代理 IP ”在各个搜索引擎上搜索,获取候选 URL
爬取候选 URL ,将代理地址储存下来
验证代理地址,将可用的代理地址放入代理池
难点
如何去验证维护这些代理地址
如何知道哪些代理地址适合哪些网站(可用性,响应时间)
效率问题(之前写过简单的验证脚本,但是效率非常低)
小伙伴们有不有什么好的办法能解决这些问题呢?
怪我咯2017-04-18 09:08:55
大概写下吧,恰好之前做过一样的工作,当时也是需要代理,然后自己写了爬虫做自动获取和自动更新。
代理地址的话我没有去让爬虫自己选网站,而是人工筛选了几个提供免费代理的网站然后分别写了一些爬虫去爬不同的代理网站;
针对你说的难点:
验证的话初次爬到的地址会直接先验证是否可用,能用再存入数据库或持久化;因为代理的不可靠性,需要定时检查抓到的代理是否可用,我是直接在 uWSGI 服务器起了一个定时任务,每半小时会检查一次,每一小时会抓一次新的代理,当然你也可以用 crontab 之类的定时任务做;
直接用抓到的代理访问需要访问的网站,如果需要针对不同网站提供不同代理可以验证后把相关验证信息一起储存;
效率问题好处理,网络验证操作都是 i/o 密集型任务,用协程、多线程、多进程都可以解决,python 的 gil 不影响多线程提高 i/o 密集型任务的效率
multithreading-spider之前我用 多线程 + queue 做的一个简单的代理爬虫,src 的 demo 里是具体例子,使用了简单的生产者消费者模型,爬到代理地址的爬虫当做生产者,验证代理可用性的爬虫当做消费者,可以显示具体任务进度。