对我们一般用户而言, 爬虫是个很好的工具, 利用它可以方便的快速的获取想要的信息。 但对于网站而言, 网络爬虫占用了太多的资源, 也没可能从这些爬虫获取点击量增加广告收入, 所以很多网站痛恨爬虫, 对爬虫采取了一系列的反爬虫措施, 其中最主要的一条措施就是会封禁频繁快速访问大量网页的ip。 而通过代理ip网络爬虫可绕过这一限制。 要使用代理ip, 我们首先要获取大量代理ip并构建一个代理ip池。 一下示例用python的scrapy框架实现了通过爬虫自动获取免费代理ip的功能。
首先创建scrapy项目, 运行一下命令:
$ scrapy startproject getProxy kuaidaili
$ scrapy genspider proxyKdlSpider kuaidaili
百度搜索免费代理ip, 我进的是快代理, 页面通过列表显示代理ip及其相关信息的。
3. 通过以上的界面, 改写items.py, 增加如下项, 用来保存代理ip的相关信息
4. 通过观察页面源码, 发现我们需要的代理ip信息可用xpath轻易获取。
5. 通过上图观察到的规律改写proxyKdlSpider.py文件, 通过如下xpath可获取代理ip信息。
6. 改写pipelines.py, 将解析提取出来的代理ip信息保存到文件proxy.txt中。
7. 改写settings.py, 增加以下行:
其中USER_AGENT会改写请求headers。 因快代理网站会通过USER_AGENT来判断访问者是否爬虫, 不这样设置会导致运行爬虫的ip被封禁。
设置DOWNLOAD_DELAY=5含义是爬虫每5s请求一个网页, 这样设置的目的是为了避免快速访问大量网页触发网站的反爬虫机制
设置ITEM_PIPELINES是告诉爬虫在过滤完需要的信息后如何保存。
8 运行编写的爬虫:
$ scrapy crawl proxyKdlSpider
由于我们限制了采集速度, 过程会有点长。 运行完毕后采集结果如下:
免费代理ip虽然采集完了, 其中有的是不可用的, 如何筛选出所有可用的代理ip, 可参考我上一片文档: 如何验证代理ip的有效性。