网页抓取数据( 这是简易数据分析系列的第10篇文章(-n+100))

优采云 发布时间: 2022-01-23 17:11

  网页抓取数据(

这是简易数据分析系列的第10篇文章(-n+100))

  

  这是简易数据分析系列文章的第10期。html

  **友情提示:**这篇文章文章内容很多,信息量很大。希望大家在学习的时候多读几遍。网络

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

  

  今天我们要讲的是如何使用Web Scraper来抓取滚动到最后的网页。浏览器

  今天的实践网站是知乎的数据分析模块的精华,网址是:markdown

  学习

  

  这次要刮的内容是精英帖的标题、回答者和点赞数。下面是今天的教程。网站

  1.制作站点地图

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

  

  在这种情况下,所选元素被命名为 div.List-item。。网

  

  为了复习上一节通过数据数控制记录数的方法,我们在元素名后面加上nth-of-type(-n+100),暂时只抓取前100个数据.3d

  

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

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

  

  然后是响应者姓名和点赞数,选中元素名称为#Popover10-toggle a和button.VoteButton--up:

  

  

  2. 爬取数据,发现问题

  元素全部被选中。我们按照Sitemap 知乎_top_answers -> Scrape -> Start craping 的路径来抓取数据。等了十多秒才出来结果,内容让我们傻眼了:

  

  数据呢?我要捕获哪些数据?为什么这一切都变成了空?

  在计算机领域,null通常表示一个空值,表示什么都没有,如果放在Web Scraper中,则表示没有抓取到任何数据。

  

  我们可以回想一下,网页上确实有数据。在整个操作过程中,唯一的变量就是选择元素的操作。因此,确定我们选择元素有误,导致内容匹配出现问题,无法正常获取数据。要解决这个问题,我们要看看页面的构成。

  3.分析问题

  要查看一个网页的构成,我们需要用到浏览器的另一个功能,就是选择视图元素。

  **1.**我们点击控制面板左上角的箭头,此时箭头颜色会变为蓝色。

  **2.** 然后我们将鼠标移到标题上,标题将被蓝色半透明蒙版覆盖。

  **3.** 我们再次点击标题,会发现我们会跳转到Elements子面板,里面收录了一些难以理解的彩色代码

  

  这里不要害怕,这些HTML代码不涉及任何逻辑,它们只是网页中的一个骨架,提供一些排版功能。如果你每天都在写markdown,你可以将HTML理解为具有更复杂功能的markdown。

  结合HTML代码,我们先看一下[itemprop='知乎:question']的匹配规则a。

  

  首先这是一个树结构:

  从可视化的角度来看,上一句其实是一个嵌套结构。我提取了关键内容。内容结构是否清晰得多?

  

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

  让我们再分析一个标题 HTML 代码,它将标题作为空值。

  

  我们可以很清楚的观察到,在这个标题的代码中,缺少属性itemprop='知乎:question'的名为div的标签!这样,当我们的匹配规则匹配到时,找不到对应的标签,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.下一期

  本期内容很多,可以多看几遍消化一下。下一期我们会讲一些简单的内容,以及如何抓取表格内容。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线