Web Scraper 捉虫实例(一)
缘起
昨晚星球「风巢」群友 爵爷 向我提问用 Web Scraper 抓取黄有璨知乎「回答」页面的标题(title)、点赞数(like-count)、正文内容(content)及评论数(comment-count),我顺手写了两个爬虫方案出来。网址:
https://www.zhihu.com/people/huangyoucan/answers?page=1
方案一
利用 Start URL 抓取多个页面,设计如下:
方案二
利用 底部导航栏 抓取多个页面,设计如下:
两个爬虫写完开始抓取时,其中出现大量 null 值,表示数据有漏抓,这是什么鬼?
下面以消除 content 字段 null 值为例,讲下我的 Debug 思路。
捉虫
一、测试
我首先打开选择 content 字段的选择器,点击 Element preview,如下图:
正常选中,连续翻了几页,都没问题,那问题出在哪里了呢?
我想到抓取 页面中间 大段的 null,难道是页面下方那些没选上?
不过这个 Element preview 只能看每页第 1 项是否符合,其他看不到,这咋办呢?
有办法,我再建个 Sitemap 不就行了?
二、解惑
我又建了个专门抓取 content 内容的 Sitemap:
把之前 Element preview 后那段长长的 选择条件 复制进去,重新 preview。
也是只选中部分 content,看来问题出在这里。如何解决呢?
也简单,之前 Element 选择器的子元素只能从页面首个元素块里选择 content,这里没限制了,连续 select 两个连续元素就出来了,再 preview 一下:
没问题,都选中了,bingo!
比较下前后 Element preview 后的两端 选择条件:
前:div.RichContent-inner.RichContent-inner--collapsed
后:div.RichContent-inner
多出来红色这段,选择条件更加严格,难怪好多漏选。
三、破解
问题清楚了,怎么修改呢?直接把后来这段选择条件替换原来的不就好了?
按如下方式修改:
重新抓取,哈哈,问题解决了。看了这个例子,后面评论数里面那些 null,你知道怎么消除了不?
总结
1、使用 Element 类选择器常会出现这种问题,因为 Element 的子选择器只能从页面第一个选择选择筛选条件,通常会较为严格,容易造成抓取时页面下部元素漏选的结果。
2、此时再建个 Sitemap,专门抓取当页子选择器选择的特定元素,进而确定抓取格式,是解决这一问题的有效方案。
3、我是在方案二的基础上进行修改的。
回复 20180306 ,可获得修改前的方案一、方案二 Sitemap,以及修改后的方案 2 Sitemap。
你可以在此基础上尝试按照我今天讲述的方法修复方案一、二的失误之处。
【其他】
1、社群:3个 微信群 写作打卡 & 爬虫交流 & SEO营销, 1个 知识星球,回复 社群 了解加入方式,一起切磋,互开脑洞。
您可能对以下文章也感兴趣: