查看原文
其他

Web Scraper 捉虫实例(一)

森淼 风巢 2023-02-16


   缘起

昨晚星球「风巢」群友 爵爷 向我提问用 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个 知识星球,回复 社群 了解加入方式,一起切磋,互开脑洞。


您可能对以下文章也感兴趣:

1、一个偶然发现的月赚千万niche站案例剖析

2、一个信息变现&引流实战案例复盘

3、两分钟内一气呵成打造套利印钞机,这个骚年是如何做到的?

4、今天好开森,终于有人抄袭我了

5、我从抄袭者处发掘到哪3个机会?

6、如何从别人的提问中挖掘财富机会?

7、爱情手游《Florence》中那些打动人心的细节


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存