网页数据抓取怎么写( 元素名后加个-typegt的路径进行数据编号控制)
优采云 发布时间: 2022-01-01 17:16网页数据抓取怎么写(
元素名后加个-typegt的路径进行数据编号控制)
这是简单数据分析系列的第十篇文章。
原文首发于博客园:简单数据分析10.
友情提示:本文文章内容丰富,信息量大。希望你在学习的时候多读几遍。
我们扫朋友圈和微博的时候,总是强调“扫一扫”这个词,因为在看动态的时候,当内容被拉到屏幕末尾的时候,APP会自动加载下一页的数据。从经验来看,数据会不断加载,永远不会结束。
今天我们要讲的是如何使用Web Scraper抓取滚动到最后的网页。
我们今天的动手实践网站是知乎的数据分析模块的精髓。该网站是:
/topic/19559424/top-answers
这次要爬取的内容是精华帖的标题、回复者和批准数。以下是今天的教程。
1.制作站点地图
一开始,我们需要创建一个容器,其中收录要捕获的三种类型的数据。为了实现滚动到最后加载数据的功能,我们选择容器的Type为Element scroll down,即滚动到页面底部加载数据。 .
在本例中,所选元素名称为 div.List-item。
为了回顾上一节通过数据个数控制item个数的方法,我们在元素名中添加nth-of-type(-n+100),只抓取第一个暂时100条数据。
然后我们保存容器节点,选择该节点下要捕获的三种数据类型。
首先是标题,我们命名为title,被选元素命名为[itemprop='知乎:question'] a:
然后是响应者的名字和批准的数量一样,被选中的元素名称是#Popover10-toggle a和button.VoteButton--up:
2.爬取数据,发现问题
元素都选好了,我们沿着Sitemap 知乎_top_answers -> Scrape -> Start craping抓取数据的路径,等了十几秒结果出来后,内容让我们傻眼了:
数据呢?我想捕获什么数据?怎么全部都变成null了?
在计算机领域,null一般表示空值,即什么都没有。将其放入 Web Scraper 意味着没有捕获到任何数据。
我们可以回忆一下,网页上确实有数据。在我们整个操作过程中,唯一的变量就是选择元素的操作。所以一定是我们在选择元素的时候出错了,导致内容匹配出现问题,无法正常抓取数据。要解决这个问题,就得看网页的构成。
3.分析问题
要查看网页的构成,需要用到浏览器的另一个功能,就是选择视图元素。
1.我们点击控制面板左上角的箭头,此时箭头的颜色会变成蓝色。
2. 然后我们将鼠标移到标题上,标题会被一个蓝色的半透明蒙版覆盖。
3.我们再点一下标题,会发现会跳转到Elements子面板,内容是一些不太懂的彩色代码
不要因为这样做而感到沮丧。这些 HTML 代码不涉及任何逻辑。它们是网页中的骨架,提供一些排版功能。如果平时用markdown写的话,可以把HTML理解成功能更复杂的markdown。
结合HTML代码,我们来看看[itemprop='知乎:question']一个匹配规则。
首先,这是一个树状结构:
最后一句从视觉上分析。它实际上是一个嵌套结构。我提取了关键内容。内容结构是否更清晰?
如何快速成为数据分析师?
我们再分析一个抓取标题为 null 的标题 HTML 代码。
我们可以清楚地观察到,在这个标题的代码中,缺少属性为itemprop='知乎:question'的名为div的标签!结果,当我们的匹配规则匹配时,找不到对应的标签,Web Scraper就会放弃匹配,认为找不到对应的内容,所以就变成null了。
找到原因后,我们就能解决问题。
4.解决问题
我们发现在选择标题时,无论标题的嵌套关系如何变化,总会有一个标签保持不变,即包裹在最外层的h2标签,属性名class='ContentItem -标题'。如果可以直接选择h2标签,是不是就不能完美匹配标题内容了?
逻辑上理清关系后,我们如何使用Web Scraper来操作呢?这时候我们可以使用上一篇文章介绍的内容,使用键盘P键选择元素的父节点:
在今天的课程中,我们可以点击两次P键来匹配标题的父标签h2(或h2.ContentItem-title):
等等,因为响应者的名字也出现null,我们分析HTML结构,选择名字的父标签span.AuthorInfo-name。具体的分析操作和上面类似,你可以试试。
我的三个子内容选择器如下,可以作为参考:
最后我们点击Scrape抓取数据,查看结果,没有null,完美!
5.吐槽时间
爬取知乎的数据时,我们会发现滚动加载数据完成的很快,但是匹配元素需要很多时间。
这个间接的解释,知乎这个网站从代码的角度分析,写的还是比较差的。
如果你爬取更多网站,你会发现大部分网页结构更“随心所欲”。因此,在正式抓取数据之前,往往需要进行小范围的尝试,比如先抓取20个项目,看看数据是否有问题。如果没有问题,再增加*敏*感*词*正式爬取,可以在一定程度上减少返工时间。
6.下一期预览
本期内容较多。你可以多读几遍并消化它。下一期我们会讲一些简单的内容,讲讲如何抓取table的内容。