目前做爬虫,大概最耗费时间的就是在写提取规则上。目前常用的工具,如bs4, xpath, regex等,此类工具对于定向垂直抓取(amazon, taobao, jd)特别适合。但如果站点超过100, 比如说各个网站的新闻内容,那么仍用精准的解析规则成本就会提高很多。
如果谷歌搜索 网页正文提取, 那么你可能查阅到更多通用的方案。下面我就简单谈谈目前我正在学习的基于html结构树的方案。
假设
1 同一站点下的html结构与内容都非常类似,比如广告的位置(甚至内容)
2 同一站点下的html不同之处包含时间、标题、正文段落等我们感兴趣的内容
方案
1 将html解析为dom树,并对同一站点下的html进行比较
2 遍历dom树下的节点,对于两颗树相同/相似节点的内容进行比较,如果内容相同则提取出来
以采用xpath为例,对于path可能需要做一些处理
path0 = ‘/html/p[0]/li[2]’
path0 --> path1 = '/html/p/li'
简化之后,更关注html的整体结构,而非离散的重复序列
基于以上思路,我笔趣阁的小说为例,对于同一部小说的两章作出了对比提取,正文确实可以提出来,不过同时也提取出了部分js代码。简单粗暴不过还算有效,但值得一提的是,后期可能还是需要加入一些的过滤规则,比如 将js的标签内容去掉,换行符的冗余处理。
后记:利用对比html的结构树的方案制作提取规则,不要求精准定位,但提取出来的数据可能需要后期的清洗,或者根据经验,继续完善(待续)