本身爬虫程序一定要在合乎规范的范围中进行,不能够影响被访服务器的正常运行,更不能把爬取来的信息用作其他用途,这是首先需要去明确的一点,那么应该怎么保证爬虫程序的正常运行并且高效抓取数据呢?
1.高效爬虫的系统
想要有一个能够高效抓取信息的爬虫程序,相关的系统配置一定要到位。比如说:需要高带宽的网络,如果网络水平太低,平均一个网页只有几百kb的速度,那么基本上就可以放弃操作了;由于代理服务器的稳定性并不是很稳定的,所以一个完整的爬虫程序要有自己相应的容错机制,这样确保整个爬虫程序最后能够完整爬取下来;当然,想要正常爬取还需要一个好用的转化存储系统,这样才能确保程序爬取到的数据能够正常存储使用。
2.代理ip突破频率限制
一般来说,一个网站服务器检测是否为爬虫程序的一个很大的依据就是代理ip,如果网站检测到同一个代理ip在短时间之内频繁多次的向网站发出不同的HTTP请求,那么基本上就会被判定为爬虫程序,然后在一段时间之内,当前的代理ip信息在这个网页中就不能正常的使用。
所以如果不使用代理ip,就只能在爬取的过程中延长请求的间隔时间和频率,以便更好地避免被服务器禁止访问,当然,如果手里有大量的代理ip资源,就可以比较方便的进行抓取工作,也可以选择自建服务器或者自己爬取,但是网上免费的代理ip多少会有不安全的地方,使用代理商代理ip可以更好的维护网络安全。
我用 PHP 和 Python 都写过爬虫和正文提取程序。最开始使用 PHP 所以先说说 PHP 的优点:
1.语言比较简单,PHP 是非常随意的一种语言。写起来容易让你把精力放在你要做的事情上,而不是各种语法规则等等。
2.各种功能模块齐全,这里分两部分:
1.网页下载:curl 等扩展库
2.文档解析:dom、xpath、tidy、各种转码工具,可能跟题主的问题不太一样,我的爬虫需要提取正文,所以需要很复杂的文本处理,所以各种方便的文本处理工具是我的大爱。
总之容易上手。
缺点:
1.并发处理能力较弱:由于当时 PHP 没有线程、进程功能,要想实现并发需要借用多路服用模型,PHP 使用的是 select 模型。实现其来比较麻烦,可能是因为水平问题我的程序经常出现一些错误,导致漏抓。
再说说 Python:
优点:
1.各种爬虫框架,方便高效的下载网页
2.多线程、进程模型成熟稳定,爬虫是一个典型的多任务处理场景,请求页面时会有较长的延迟,总体来说更多的是等待。多线程或进程会更优化程序效率,提升整个系统下载和分析能力。
3.GAE 的支持,当初写爬虫的时候刚刚有 GAE,而且只支持 Python ,利用 GAE 创建的爬虫几乎免费,最多的时候我有近千个应用实例在工作。
缺点:
1.对不规范 HTML 适应能力差:举个例子,如果一个页面里面同时有 GB18030 字符集的中文和 UTF-8 字符集的中文,Python 处理起来就没有 PHP 那么简单,你自己需要做很多的判断工作。当然这是提取正文时的麻烦。
Java 和 C++ 当时也考察过,相对脚本语言比较麻烦,所以放弃。
总之,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言。如果要开发一个复杂的爬虫系统可能 Java 是个增加选项, C++ 我感觉写个模块之类的更加适合。对于一个爬虫系统来说,下载和内文解析只是基本的两个功能。真正好的系统还包括完善的任务调度、监控、存储、页面数据保存和更新逻辑、排重等等。爬虫是一个耗费带宽的应用,好的设计会节约大量的带宽和服务器资源,并且好坏差距很大。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)