爬网站的一些经验





以前曾经做过一个收集各大OJ近期比赛的小工具,挂在NKOJ上:http://acm.nankai.edu.cn/recent_contests.php,添加过一些小创新,今年也被杭电OJ抄走了,不过还没有我的版本功能完善,主要原因还是因为我做的早一些,遇到过一些BUG,思考过怎么去绕过他们。之后我又因为各种原因爬过几个网站,稍微有一点经验,简单总结一下。
PHP是我最熟悉的脚本语言,我爬网站基本就靠他了。这里主要借助了几个工具,挨个介绍一下:
1,cURL库——这是用来获取网页的函数库,他支持了丰富的特性,包括模拟浏览器,post数据,cookie,网页转向,甚至代理服务器等。在大多数情况下,利用他可以轻松模拟浏览器做的事情,获得想要的网页。唯一美中不足的是,cURL不可以将网页中的a标签的相对链接转换成绝对链接。所以我有时候会使用linux的wget来抓网页。只不过混合语言写起来会不太爽。
2,simplehtmldom——这是用来解析HTML DOM树的库。他用起来很爽,和jQuery的接口很相似。利用他可以轻松找到想要的DOM节点,获取属性或者内容。这样就可以根据网页内容定位到自己想要的部分。
3,preg_match_all——用正则表达式取出想要的内容。他是php带的一个函数,因为simplehtmldom只能找到想要的节点,但是节点的内容并不一定完全都是想要的,所以还需要用这个函数再进一步选取想要的部分。其实很多网站只用他也就足够了,但是以过去的经验来看,用他和simplehtmldom配合使用会更稳定,当网页有一些小变化的时候,simplehtmldom一般能更稳定的找到想要的部分,而preg_match_all通常更容易因为网页的变动而失败,所以定位到想要的节点后再使用就会精确不少。
现在需要爬网站的例子随处可见,新兴起来的一淘网等比价网站就是天天去各大电子商务网站爬,团购聚合网也越来越多,百度谷歌都掺和进来了。个人认为,随着信息量的增大,以后爬网站、提取聚合信息的用处会更广泛,这也可以促进很多数据挖掘工作。

本文来自Dora Blog,题目为爬网站的一些经验,转载请注明出处。
如果你喜欢我的博客,请订阅本博客的RSS以更方便的阅读
欢迎关注我的新浪微博:http://weibo.com/diaorui1987