这是简易数据分析系列的第 10 篇文章。html
**友情提示:**这一篇文章的内容较多,信息量比较大,但愿你们学习的时候多看几遍。web
咱们在刷朋友圈刷微博的时候,总会强调一个『刷』字,由于看动态的时候,当把内容拉到屏幕末尾的时候,APP 就会自动加载下一页的数据,从体验上来看,数据会源源不断的加载出来,永远没有尽头。api
咱们今天就是要讲讲,如何利用 Web Scraper 抓取滚动到底翻页的网页。浏览器
今天咱们的练手网站是知乎数据分析模块的精华帖,网址为:markdown
https://www.zhihu.com/topic/19559424/top-answers学习
此次要抓取的内容是精华帖的标题、答题人和赞同数。下面是今天的教程。网站
刚开始咱们要先建立一个 container,包含要抓取的三类数据,为了实现滚动到底加载数据的功能,咱们把 container 的 Type 选为 Element scroll down
,就是滚动到网页底部加载数据的意思。spa
在这个案例里,选择的元素名字为 div.List-item
。.net
为了复习上一节经过数据编号控制条数的方法,咱们在元素名后加个 nth-of-type(-n+100)
,暂时只抓取前 100 条数据。3d
而后咱们保存 container 这个节点,并在这个节点下选择要抓取的三个数据类型。
首先是标题,咱们取名为 title,选择的元素名为 [itemprop='zhihu:question'] a
:
而后是答题人名字 name 与 赞同数 like,选择的元素名分别为 #Popover10-toggle a
和 button.VoteButton--up
:
元素都选择好了,咱们按 Sitemap zhihu_top_answers
-> Scrape
-> Start craping
的路径进行数据抓取,等待十几秒结果出来后,内容却让咱们傻了眼:
数据呢?我要抓的数据呢?怎么全变成了 null?
在计算机领域里,null 通常表示空值,表示啥都没有,放在 Web Scraper 里,就表示没有抓取到数据。
咱们能够回想一下,网页上的的确确存在数据,咱们在整个的操做过程当中,惟一的变数就是选择元素这个操做上。因此,确定是咱们选择元素时出错了,致使内容匹配上出了问题,没法正常抓取数据。要解决这个问题,咱们就要查看一下网页的构成。
查看一下网页的构成,就要用浏览器的另外一个功能了,那就是选择查看元素。
**1.**咱们点击控制面板左上角的箭头,这时候箭头颜色会变蓝。
**2.**而后咱们把鼠标移动到标题上,标题会被一个蓝色的半透明遮罩盖住。
**3.**咱们再点击一下标题,会发现咱们会跳转到 Elements
这个子面板,内容是一些花花绿绿看不大懂的代码
作到这里内心别发怵,这些 HTML 代码不涉及什么逻辑,在网页里就是个骨架,提供一些排版的做用。若是你日常用 markdown 写做,就能够把 HTML 理解为功能更复杂的 markdown。
结合 HTML 代码,咱们先看看 [itemprop='zhihu:question'] a
这个匹配规则是怎么回事。
首先这是个树形的结构:
<h2>...</h2>
,它有个 class='ContentItem-title'
的属性;<div>...</div>
,它有个 itemprop='zhihu:question'
的属性;<a>...</a>
;如何快速成为数据分析师?
上句话从可视化的角度分析,其实就是一个嵌套的结构,我把关键内容抽离出来,内容结构是否是清晰了不少?
<h2 class='ContentItem-title'/> <div itemprop='zhihu:question'/> <a>如何快速成为数据分析师?</a> </div> </h2>
咱们再分析一个抓取标题为 null 的标题 HTML 代码。
咱们能够很清楚的观察到,在这个标题的代码里,少了名为 div
属性为 itemprop='zhihu:question'
的标签!这样致使咱们的匹配规则匹配时找不到对应标签,Web Scraper 就会放弃匹配,认为找不到对应内容,因此就变成 null 了。
找到缘由后咱们就好解决问题了。
咱们发现,选择标题时,不管标题的嵌套关系怎么变,总有一个标签不变,那就是包裹在最外层的,属性名为 class='ContentItem-title'
的 h2
标签。咱们若是能直接选择 h2
标签,不就能够完美匹配标题内容了吗?
逻辑上理清了关系,咱们如何用 Web Scraper 操做?这时咱们就能够用上一篇文章介绍的内容,利用键盘 P 键选择元素的父节点:
放在今天的课程里,咱们点击两次 P
键,就能够匹配到标题的父标签 h2
(或 h2.ContentItem-title
):
以此类推,由于答题人名字也出现了 null,咱们分析了 HTML 结构后选择名字的父标签 span.AuthorInfo-name
,具体的分析操做和上面差很少,你们能够尝试一下。
个人三个子内容的选择器以下,能够做为一个参考:
最后咱们点击 Scrape 爬取数据,检查一下结果,没有出现 null,完美!
爬取知乎数据时,咱们会发现滚动加载数据那一起很快就作完了,在元素匹配那里却花了不少时间。
这间接的说明,知乎这个网站从代码角度上分析,写的仍是比较烂的。
若是你爬取的网站多了,就会发现大部分的网页结构都是比较「为所欲为」的。因此在正式抓取数据前,常常要先作小规模的尝试,好比说先抓取 20 条,看看数据有没有问题。没问题后再加大规模正式抓取,这样作必定程度上能够减小返工时间。
这期内容比较多,你们能够多看几遍消化一下,下期咱们说些简单的内容,讲讲如何抓取表格内容。
简易数据分析 09 | Web Scraper 自动控制抓取数量 & Web Scraper 父子选择器
简易数据分析 08 | Web Scraper 翻页——点击「更多按钮」翻页
由于文章发在各大平台上,帐号较多不能及时回复评论和私信,有问题可关注公众号 ——「卤代烃实验室」,关注上车防失联。
原文出处:https://www.cnblogs.com/web-scraper/p/web_scraper_element_scroll_down.html