Heim >Backend-Entwicklung >PHP-Tutorial >怎么让爬虫智能的爬取网页的文章内容
相關問題:如何提取網頁正文
最近写了一个爬虫 都过正则来匹配一个文章的内容这样有些麻烦,每个网站都要写正则。
1,怎么智能的实现网页文章内容的爬取?需要怎么做?
eg:
http://www.cnbeta.com/articles/385387.htm
http://www.ifanr.com/512005
2,抓取完以后怎么提取文章的标签?用于后于后面的相似文章推荐。
相關問題:如何提取網頁正文
最近写了一个爬虫 都过正则来匹配一个文章的内容这样有些麻烦,每个网站都要写正则。
1,怎么智能的实现网页文章内容的爬取?需要怎么做?
eg:
http://www.cnbeta.com/articles/385387.htm
http://www.ifanr.com/512005
2,抓取完以后怎么提取文章的标签?用于后于后面的相似文章推荐。
第一個問題和已有問題重複:如何识别並提取网页正文?。
第二個問題我寫過簡單的分詞算法,順便把出現頻率高的詞作爲關鍵詞提取了。即便是非常簡單的算法,對大多數網頁效果也還不錯。
不過分詞算法有很多現成的,你可以搜;
關鍵詞提取有很多現成的,你可以搜。。。
第二問貌似也與已有問題重複。
我之前用php写过一个采集插件。你这个叫网页正文提取。
算法大概如下:
1、把网页分解成很多DOM块。
2、分解的dom块。你要用一定的标准去丢弃,排除。比如有些dom快里面,都是大堆的链接这个一般是列表。可以丢弃。还有 算出文本密度(文本/html)的比值。比如(span,p,a,font)等标签所占的百分比。等等,经过多重过滤,最终会留下不多的几个dom块。再按照一定的规则过滤掉。正确率会比较高。
最重要的一个值也可以作为参考,我在一篇论文里面看到,用一段文字里面的句号多少来判定。
如果一大段文字里面,句号出现很多,那这个dom快很可能是内容快。
我之前写过一个java版的爬虫(Gworm),提出一点拙见,如果随便给你一个网址,智能的提取出网页的文章部分还是很困难的(也不是没方法吧,要用到统计概率的方法,也不能做到百分之百正确)。所以我之前的方案是使用css选择器提取内容,而不自己手写正则表达式,一个网站的css样式名一般都是很稳定的,这样一来一个网站的所有文章只需要一个提取规则,而且你第二个问题,获取文章标签,使用css选择器也可以轻松解决。介于题主使用python爬取,我不清楚python有什么库可以提供对DOM进行css选择的功能,但我相信一定是有的,对应我使用java版css选择器是Jsoup。
更新:刚google一下“python css selector”一大把结果。看下这篇文章吧https://pythonhosted.org/cssselect/。
python中有 pyquery
php有 phpquery
都很方便用jquery语法处理,
python中有scrapy框架,很不错,还有一个scrapinghub的云平台,可以省掉你的很多工作;
至于抓取标签,就涉及分类和聚类算法,这里面就有很多选择了
数据量不大的话,用 readability 的 api,省事。
https://www.readability.com/developers/api/parser
建议不要用正则来做html解析,学习一下lxml,然后在chrome浏览器的开发这模式就可以复制对应DOM节点的xpath直接在lxml,省了很多事,而且lxml解析html,xml性能杠杠的