抓取网页数据工具( 2.-type-gt-item数据,发现问题元素都选择好了)

优采云 发布时间: 2021-09-28 18:10

  抓取网页数据工具(

2.-type-gt-item数据,发现问题元素都选择好了)

  

  这是简单数据分析系列文章的第十篇。

  原文首发于Blog Garden: Simple Data Analysis 10。

  友情提示:本文文章内容丰富,信息量大。我希望你在学习的时候能多读几遍。

  我们在扫朋友圈和微博的时候,总是强调“扫一扫”这个词,因为在看动态的时候,当内容被拉到屏幕末尾的时候,APP会自动加载下一页的数据,从体验。看,数据会不断加载,永无止境。

  

  今天我们就来聊聊如何使用Web Scraper抓取滚动到最后的网页。

  今天我们动手的网站就是知乎的数据分析模块的精髓。该网站是:

  

  本次抓取的内容是精华帖的标题、回复者和批准数。下面是今天的教程。

  1.制作站点地图

  一开始,我们需要创建一个容器,其中收录要捕获的三种类型的数据。为了实现滚动到最后加载数据的功能,我们选择容器的Type为Element scroll down,即滚动到页面底部加载数据。

  

  在这种情况下,所选元素名称是 div.List-item。

  

  为了回顾上一节通过数据数量控制items数量的方法,我们在元素名中添加nth-of-type(-n+100),只抓取前100个items暂时的数据。

  

  然后我们保存容器节点,选择该节点下要捕获的三种数据类型。

  第一个是标题,我们命名为title,被选元素命名为[itemprop='知乎:question'] a:

  

  然后是被访者姓名和批准数之类的,被选中的元素名称是#Popover10-toggle a和button.VoteButton--up:

  

  

  2. 爬取数据,发现问题

  元素都选好了,我们沿着Sitemap 知乎_top_answers -> Scrape -> Start craping抓取数据的路径,等了十几秒结果出来后,内容让我们目瞪口呆:

  

  数据呢?我想捕获哪些数据?怎么全都变成空了?

  在计算机领域,null一般表示空值,即什么都没有。将其放入 Web Scraper 意味着未捕获任何数据。

  

  我们可以回忆一下,网页上确实有数据。在我们整个操作中,唯一的变量就是选择元素的操作。所以一定是我们在选择元素的时候出错了,导致内容匹配出现问题,无法正常抓取数据。要解决这个问题,就得看网页的构成。

  3.分析问题

  要检查网页的构成,浏览器的另一个功能是必须的,那就是选择视图元素。

  我们点击控制面板左上角的箭头,此时箭头的颜色会变成蓝色。然后我们将鼠标移动到标题,标题将被一个蓝色的半透明蒙版覆盖。如果我们再次点击标题,我们会发现我们会跳转到 Elements 子面板,内容是一些无法理解的彩色代码。

  

  如果你这样做,不要沮丧。这些 HTML 代码不涉及任何逻辑。它们是网页中的骨架,并提供一些排版功能。如果你平时用markdown来写,你可以把HTML理解为更复杂的markdown。

  结合HTML代码,我们来看看[itemprop='知乎:question']这个匹配规则是怎么回事。

  

  首先,这是一个树结构:

  上面这句话是从视觉上分析的。它实际上是一个嵌套结构。我提取了关键内容。内容结构是不是更清晰了?

  

   

       <a>如何快速成为数据分析师?</a>

   

  让我们分析一个将标题抓取为空的标题 HTML 代码。

  

  我们可以清楚地观察到,在这个标题的代码中,缺少名为 div 属性为 itemprop='知乎:question' 的标签!结果,当我们的匹配规则找不到对应的标签时,Web Scraper就会放弃匹配,认为找不到对应的内容,所以就变成null了。

  找到原因后,我们才能解决问题。

  4.解决问题

  我们发现在选择标题的时候,不管标题的嵌套关系如何变化,总有一个标签保持不变,也就是包裹在最外层的h2标签,属性名class='ContentItem-title' . 如果我们可以直接选择h2标签,是不是就可以完美匹配标题内容了?

  逻辑上理清了关系,我们如何使用Web Scraper?这时候我们就可以使用上一篇文章介绍的内容,通过键盘P键选择元素的父节点:

  

  在今天的课程中,我们点击P键两次匹配标题的父标签h2(或h2.ContentItem-title):

  

  以此类推,由于受访者姓名也出现null,我们分析HTML结构,选择姓名的父标签span.AuthorInfo-name。具体的分析操作和上面类似,大家可以试试。

  

  我的三个子内容的选择器如下,可以作为参考:

  

  最后我们点击Scrape进行数据抓取,查看结果,没有null,完美!

  

  5.吐槽时间

  在爬取知乎数据的时候,我们会发现滚动加载数据完成的很快,但是匹配元素需要很多时间。

  这间接说明了知乎this网站从代码上分析,写的还是比较烂的。

  如果你爬取更多网站,你会发现大部分网页结构更“随心所欲”。因此,在正式抓取数据之前,往往需要进行小规模的尝试,比如先抓取20个项目,看看数据是否有问题。如果没有问题,再*敏*感*词*增加正式爬行,可以在一定程度上减少返工时间。

  6.下次更新

  这个问题有很多内容。你可以多读几遍并消化它。下一期我们会讲一些简单的内容,讲讲如何抓取table的内容。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线