爬虫,按照获取内容的不同。可以分为大爬虫和小爬虫。有诸多开源产品,比如Storm Crawler,Elastics Search,Lucence,Sphinx等,这些都是用来抓取和索引全网站,之后根据所抓取的内容做全文检索。
大者说来百度,Google也莫过如此,因为抓取的数据量存储量大,要花费数亿元建立自己的IDC,包括一个大的分布式Web存储集群。 用户搜索时,一个关键字,是通过负载均衡到后端数十万台服务器后消化的无影无踪。 万丈高楼平地起。Google的两位创始人94在起家的时候也只有两台旧服务器。一个合格Crawler架构要达到的特性大概有如下:
1、鲁棒性 防止蜘蛛陷阱。当全站抓取,当页面存在外部链接,重复时会形成循环。当目标网站不可用时,适当放下,待恢复时第一时间进行采集。
2、礼貌 哪些页面可以抓取,哪些不能。当有隐私的内容与版权的问题,不进行采集。
3、质量 采集及时有效。新鲜的内容才更有价值。
4、可视化 可视化包括抓取采集过程中,能够实时监控状态; 另一侧的可视化为数据的整理清洗后的可视化。
5、可扩展 支持计划任务,分布式,代理服务器,模仿用户登录,自定义宏。
我们要做新闻资讯的推荐,抓取的是新闻,并非全站。Crawler不必做得像搜索引擎一样把页面全部抓取,然后分析,索引。而是按需取用,拿页面某些内容即可。
可以通过两种方式来采集网站的内容。
RSS与ATOM从网景时代发展到现在。在国外每家新闻网站基本都做了标配,用户订阅后,每天会根据RSS来查看有哪些内容做了更新。
RSS是一个XML文件格式,用来描述当前网站频道更新了哪些内容,它是一个新闻列表,包括标题和部分内容。
想必你也看到了,这是techcrunch网站的RSS源,包括RSS格式与ATOM两种格式。 它告诉我们最后更新的时间,以及更新文章的条数,包括发布日期时间、简介、图片地址等。 TC网站RSS的URL地址是:https://techcrunch.com/feed/。从源代码中看得出,这是由WordPress搭建的平台。 对于爬虫开发来讲,可以把RSS当做对方网站的开放API,在技术上获取RSS内容,取得标题,简介,再根据超链接取得详细内容。
对于国内,一些网站并没有RSS,或者不及时更新,这属于大多数情况。我们可以模拟成各种浏览器,根据内容定制化抓取。
知已知彼,百战不贻。在对一个目标网站分析之前,先了解一下对方用的什么技术来开发的网站。
使用PHP的get_headers()或curl都可以取到对方服务器的头信息,除非对方有意隐藏掉。
知道对方服务器的信息,可以知道响应如404,500,200等HTTP状态,根据服务器的技术栈来做补充策略。
一些网站,特别是新闻类网站,为了防止采集,做了很多混淆工作,比如使用Ajax,用JavaSript来输出html片断等。
在移动互联网时代,很多站点都建有面向手机的网站,如http://m.sina.com.cn,手机端的网站标签简洁,更方便我们分析抓取。有的网站设置了只有微信等特定浏览器查看,可以模仿wechat等用户代理的方法来采集。类似于如下代码:
以上,我们通过几种方法,可以正常拿到网页内容了。 分析和抓取列表页 列表页一般为标题,简介,缩略图之类。比如一个房源列表的页面。我们通过正则表达式进行内容提取。
|