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

原文首发于博客园:简易数据分析 10。

友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍。

我们在刷朋友圈刷微博的时候,总会强调一个『』字,因为看动态的时候,当把内容拉到屏幕末尾的时候,APP 就会自动加载下一页的数据,从体验上来看,数据会源源不断的加载出来,永远没有尽头。

我们今天就是要讲讲,如何利用 Web Scraper 抓取滚动到底翻页的网页。

今天我们的练手网站是知乎数据分析模块的精华帖,网址为:

https://www.zhihu.com/topic/19559424/top-answers

这次要抓取的内容是精华帖的标题答题人赞同数。下面是今天的教程。

1.制作 Sitemap

刚开始我们要先创建一个 container,包含要抓取的三类数据,为了实现滚动到底加载数据的功能,我们把 container 的 Type 选为 Element scroll down,就是滚动到网页底部加载数据的意思。

在这个案例里,选择的元素名字为 div.List-item

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

然后我们保存 container 这个节点,并在这个节点下选择要抓取的三个数据类型。

首先是标题,我们取名为 title,选择的元素名为 [itemprop='zhihu:question'] a

然后是答题人名字 name 与 赞同数 like,选择的元素名分别为 #Popover10-toggle abutton.VoteButton--up

2.爬取数据,发现问题

元素都选择好了,我们按 Sitemap zhihu_top_answers -> Scrape -> Start craping 的路径进行数据抓取,等待十几秒结果出来后,内容却让我们傻了眼:

数据呢?我要抓的数据呢?怎么全变成了 null?

在计算机领域里,null 一般表示空值,表示啥都没有,放在 Web Scraper 里,就表示没有抓取到数据。

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

3.分析问题

查看一下网页的构成,就要用浏览器的另一个功能了,那就是选择查看元素

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

2.然后我们把鼠标移动到标题上,标题会被一个蓝色的半透明遮罩盖住。

3.我们再点击一下标题,会发现我们会跳转到 Elements 这个子面板,内容是一些花花绿绿看不大懂的代码

做到这里心里别发怵,这些 HTML 代码不涉及什么逻辑,在网页里就是个骨架,提供一些排版的作用。如果你平常用 markdown 写作,就可以把 HTML 理解为功能更复杂的 markdown。

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

首先这是个树形的结构:

  • 先是一个名字为 h2 的标签 <h2>...</h2>,它有个 class='ContentItem-title' 的属性;
  • 里面又有个名为 div 的标签 <div>...</div>,它有个 itemprop='zhihu:question' 的属性;
  • div 标签里又有一个 名字为 a 的标签 <a>...</a>
  • a 标签里有一行,就是我们要抓取的标题:如何快速成为数据分析师?

上句话从可视化的角度分析,其实就是一个嵌套的结构,我把关键内容抽离出来,内容结构是不是清晰了很多?

<h2 class='ContentItem-title'/><div itemprop='zhihu:question'/><a>如何快速成为数据分析师?</a></div>
</h2>我们再分析一个抓取标题为 null 的标题 HTML 代码。

我们可以很清楚的观察到,在这个标题的代码里,少了名为 div 属性为 itemprop='zhihu:question' 的标签!这样导致我们的匹配规则匹配时找不到对应标签,Web Scraper 就会放弃匹配,认为找不到对应内容,所以就变成 null 了。
找到原因后我们就好解决问题了。

4.解决问题
我们发现,选择标题时,无论标题的嵌套关系怎么变,总有一个标签不变,那就是包裹在最外层的,属性名为 class='ContentItem-title'h2 标签。我们如果能直接选择 h2 标签,不就可以完美匹配标题内容了吗?
逻辑上理清了关系,我们如何用 Web Scraper 操作?这时我们就可以用上一篇文章介绍的内容,利用键盘 P 键选择元素的父节点:

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

以此类推,因为答题人名字也出现了 null,我们分析了 HTML 结构后选择名字的父标签 span.AuthorInfo-name,具体的分析操作和上面差不多,大家可以尝试一下。

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

最后我们点击 Scrape 爬取数据,检查一下结果,没有出现 null,完美!

5.吐槽时间
爬取知乎数据时,我们会发现滚动加载数据那一块儿很快就做完了,在元素匹配那里却花了很多时间。
这间接的说明,知乎这个网站从代码角度上分析,写的还是比较的。
如果你爬取的网站多了,就会发现大部分的网页结构都是比较「随心所欲」的。所以在正式抓取数据前,经常要先做小规模的尝试,比如说先抓取 20 条,看看数据有没有问题。没问题后再加大规模正式抓取,这样做一定程度上可以减少返工时间。6.下期预告
这期内容比较多,大家可以多看几遍消化一下,下期我们说些简单的内容,讲讲如何抓取表格内容。7.推荐阅读
简易数据分析 09 | Web Scraper 自动控制抓取数量 & Web Scraper 父子选择器
简易数据分析 08 | Web Scraper 翻页——点击「更多按钮」翻页

div自动滚动_简易数据分析 10 | Web Scraper 翻页——抓取「滚动加载」类型网页相关推荐

  1. 动态加载子节点_简易数据分析 10 | Web Scraper 翻页—抓取「滚动加载」类型网页...

    这是简易数据分析系列的第 10 篇文章. 原文首发于博客园:简易数据分析 10. 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『 ...

  2. java抓取网页数据_简易数据分析 10 | Web Scraper 翻页——抓取滚动加载类型网页...

    [这是简易数据分析系列的第 10 篇文章] 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到 ...

  3. webscraper多页爬取_Web Scraper 翻页——抓取「滚动加载」类型网页(Web Scraper 高级用法)| 简易数据分析 10...

    这是简易数据分析系列的第 10 篇文章. 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到屏 ...

  4. Web Scraper 翻页——抓取分页器翻页的网页(Web Scraper 高级用法)| 简易数据分析 12

    这是简易数据分析系列的第 12 篇文章. 前面几篇文章我们介绍了 Web Scraper 应对各种翻页的解决方法,比如说修改网页链接加载数据.点击"更多按钮"加载数据和下拉自动加载 ...

  5. 地图选择器怎么用_简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用....

    [ 这是简易数据分析系列的第 15 篇文章 ] 年末事情比较忙,很久不更新了,后台一直有读者催更,我看了一些读者给我的私信,发现一些通用的问题,所以单独写篇文章,介绍一些 Web Scraper 的进 ...

  6. Web Scraper 高级用法——抓取二级网面 | 简易数据分析 13

    这是简易数据分析系列的第 13 篇文章. 在前面的课程里,我们抓取的数据都是在同一个层级下的内容,探讨的问题主要是如何应对市面上的各种分页类型,但对于详情页内容数据如何抓取,却一直没有介绍. 比如说我 ...

  7. webscraper多页爬取_数据收集:web scraper 多页(无规律url)抓取

    前言 web scraper是一个很好用的Chrome爬虫插件,它易学易用,能够满足大部分需求,而且因为是基于浏览器渲染的,所以能回避很多反爬虫问题.另外,web scraper可以多开进程,对于一些 ...

  8. web scraper翻页功能的实现

    我们在爬取网站内容时,经常会碰到这个小框框. 那么我们可以使用web scrapper的element click选择器 click selector的选择 selector可以框选需要选择的具体内容 ...

  9. webscraper多页爬取_Web Scraper 翻页——控制链接批量抓取数据(Web Scraper 高级用法)| 简易数据分析 05...

    这是简易数据分析系列的第 5 篇文章. 上篇文章我们爬取了豆瓣电影 TOP250 前 25 个电影的数据,今天我们就要在原来的 Web Scraper 配置上做一些小改动,让爬虫把 250 条电影数据 ...

最新文章

  1. H3C学习笔记《五》(初级理论知识)
  2. 如何直观的解释back propagation算法?
  3. jq js json 转字符串_JQuery如何把JSON字符串转为JSON对象
  4. python_函数相关的各种参数定义和传递
  5. 基于 ida 的反汇编转换 Obj 的可行性 笔记(1)
  6. memmove() -- 拷贝内存内容
  7. poj3264Balanced Lineup(RMQ)
  8. [转]win7-64位系统添加access的ODBC数据源 看不到其它数据源的问题
  9. 2021-09-09316. 去除重复字母 栈
  10. 国产杂牌机java_国货精品 山寨 杂牌 HiPhone 诺卡 MTK联发科 mrp
  11. MATLAB(四) 图像处理--对象分析与属性
  12. Android 9.0 开启飞行模式
  13. 使用Python进行数独求解(一)
  14. OpenERP的外贸企业ERP方案
  15. RPA---Uipath Try Catch
  16. 蓄水池算法的设计和实现
  17. Windows Terminal美化杂记-Windows Terminal使用与配置
  18. 利用vscode调试vue代码
  19. Win10取消应用商店版的Python
  20. webpack二刷之五、生产环境优化(3.sideEffects 副作用)

热门文章

  1. mysql初学者_MYSQL初学者使用介绍
  2. 关掉magiskhide_最新版Magisk-v20.4刷入后找不到Magisk Hide怎么办+Magisk Hide开启教程
  3. tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners
  4. php入门代码 基础慕课,php基础入门
  5. CCF认证201712-2游戏
  6. freeMarker(十二)——模板语言补充知识
  7. oracle数据导入/导出
  8. Sikuli -- 创新的图形化编程技术
  9. JAVA作业-简易计算器
  10. ubuntu 网络设置