抓取网页数据违法吗( 讲讲如何抓取网页表格里的数据(1)_1. )

优采云 发布时间: 2022-02-05 22:22

  抓取网页数据违法吗(

讲讲如何抓取网页表格里的数据(1)_1.

)

  

  今天我们将讨论如何在 Web 表单中捕获数据。首先我们来分析一下网页中的经典表格是如何组成的。

  

  经典的表格都是关于这些知识点的,没了。让我们编写一个简单的表单 Web Scraper 爬虫。

  1.创建站点地图

  我们今天的练习 网站 是

  %C9%CF%BA%A3&txt道达=%B1%B1%BE%A9

  爬虫的内容是爬取上海到北京的所有火车时刻表。

  我们首先创建一个收录整个表格的容器,并将Type选择为Table,表示我们要抓取表格。

  

  具体参数如上图所示,因为比较简单,就不多说了。

  在此面板下向下滚动,您会发现一个不同的面板。如果你看一下,你会发现这些数据实际上是表数据类型的分类。在这种情况下,他列出了火车、出发站和行驶时间的类别。

  

  在表格列类别中,默认勾选每行内容旁边的选择按钮,这意味着默认捕获这些列的内容。如果您不想爬取某种类型的内容,只需去掉相应的复选框即可。

  当你点击保存选择器按钮的时候,你会发现Result键的一些选项报错,说invalid format format无效:

  

  解决这个错误非常简单。一般来说,Result 键名的长度是不够的。您可以添加空格和标点符号。如果仍然出现错误,请尝试更改为英文名称:

  

  解决错误并保存成功后,我们就可以按照Web Scraper的爬取例程抓取数据了。

  2.我为什么不建议你使用 Web Scraper 的表格选择器?

  如果按照刚才的教程,感觉会很流畅,但是看数据的时候,就傻眼了。

  刚开始爬的时候,我们先用Data preview预览数据,发现数据很完美:

  

  抓取数据后,在浏览器的预览面板中预览,会发现trains一栏的数据为null,表示没有抓取到相关内容:

  

  我们下载捕获的CSV文件并在预览器中打开后,我们会发现出现了列车号的数据,但是出发站的数据又为空了!

  

  这不是傻子!

  我已经研究这个问题很长时间了。应该是Web Scraper对中文关键词索引的支持不是很友好,所以会抛出一些奇怪的bug,所以不建议大家使用它的Table功能。

  如果真的要抓取表数据,可以使用前面的方案,先创建一个Element类型的容器,然后在容器中手动创建一个子选择器,这样就可以避免这个问题了。

  以上只是一个原因,另一个原因是,在现代 网站 中,很少有人再使用 HTML 原创表格了。

  HTML 为表格提供了基本的标签,例如

  , , 等标签,提供默认样式。优点是互联网刚开发的时候,可以提供开箱即用的形式;缺点是样式过于简单,不易定制。后来很多网站用其他标签来模拟表格,就像PPT用各种大小的块组合成一个表格,很容易自定义:

  

  正因如此,当你使用Table Selector匹配一个表格的时候,可能会匹配不上,因为从Web Scraper的角度来看,你看到的表格是*敏*感*词*的,根本不是原装的,自然不是。认可。

  3.总结

  我们不建议直接使用 Web Scraper 的 Table Selector,因为它对中文支持不是很友好,也不太适合现代网页。如果有抢表的需求,可以使用之前创建父子选择器的方法来做。

  

  在之前的文章文章中,我们介绍了Web Scraper对各种翻页的解决方案,比如修改网页链接加载数据、点击“更多按钮”加载数据、下拉自动加载数据等。今天我们讲一种比较常见的翻页方式——pager。

  我本来想解释什么是寻呼机,但是我发现浏览一堆定义很麻烦。大家上网已经不是第一年了,看图就知道了。我找到了一个功能齐全的例子,支持数字页码调整,上一页到下一页和指定页数跳转。

  

  今天我们将学习 Web Scraper 如何处理这种类型的翻页。

  其实在本教程的第一个例子中,我们就抢到了豆瓣电影TOP排行榜。这个豆瓣电影列表使用寻呼机来划分数据:

  

  但是当时我们是在找网页链接定期爬取,并没有使用pager来爬取。因为当一个网页的链接有规律的变化时,控制链接参数的爬取成本是最低的;如果可以翻页,但是链接的变化不规律,就得去pager了一会儿。

  说这些理论有点无聊,我们举个不规则翻页链接的例子。

  8月2日是蔡徐坤的生日。为了庆祝,微博上的粉丝给了坤坤300W的转发。微博的转发恰好是被寻呼机分割的,所以我们来分析一下微博的转发。信息页面,了解如何使用 Web Scraper 抓取此类数据。

  

  这条微博的直接链接是:

  看了这么多他的视频,为了表达我们的感激之情,我们可以点进去给坤坤加个阅读量。

  首先我们看第1页转发的链接,长这样:

  第二页是这样的,我注意到有一个额外的#_rnd36 参数:

  #_rnd36

  第三页参数为#_rnd39

  #_rnd39

  第 4 页参数是#_rnd76:

  #_rnd76

  多看几个链接,会发现这个转发页面的URL没有规则,只能通过pager加载数据。让我们开始我们的实践教学课程。

  1.创建站点地图

  我们首先创建一个SiteMap,这次命名为cxk,起始链接为

  

  2.为容器创建一个选择器

  因为我们要点击pager,所以我们选择外层容器的类型为Element Click。具体参数说明见下图。我们之前在《简单数据分析08》中详细讲解过,这里就不多说了。

  

  容器的预览如下图所示:

  

  寻呼机选择过程如下图所示:

  

  3.创建子选择器

  这些子选择器比较简单,类型都是文本选择器。我们选择了三种类型的内容:评论用户名、评论内容和评论时间。

  

  4.捕获数据

  可以根据Sitemap cxk -> Scrape 的操作路径抓取数据。

  5.一些问题

  如果你看了我上面的教程,马上爬数据,你可能遇到的第一个问题就是,300w的数据,我需要一直爬下去吗?

  听起来很不现实。毕竟Web Scraper针对的数据量比较少,上万的数据算太多了。不管数据有多大,都要考虑爬取时间是否过长,数据如何存储,如何处理。网站的反爬系统(比如突然弹出一个验证码,这个Web Scraper无能为力)。

  考虑到这个问题,如果你看过上一篇关于自动控制抓取次数的教程,你可能会想到使用 :nth-of-type(-n+N) 来控制 N 条数据的抓取。如果你尝试一下,你会发现这个方法根本行不通。

  失败的原因其实涉及到一点网页知识。如果您有兴趣,可以阅读下面的说明。不感兴趣的可以直接看最后的结论。

  就像我之前介绍的更多加载网页和下拉加载网页一样,它们新加载的数据是附加到当前页面的。你不断向下滚动,数据不断加载,网页的滚动条会越来越短。表示所有数据都在同一页面上。

  当我们使用:nth-​​of-type(-n+N) 来控制加载次数的时候,其实就相当于在这个网页上设置了一个计数器。当数据已经累积到我们想要的数量时,它就会停止爬取。

  但是对于使用分页器的网页,每翻一页就相当于刷新当前网页,这样每次都会设置一个计数器。

  比如你要抓1000条数据,但是第一页只有20条数据,抓到最后一条,还有980条数据。对于一条数据,还有980,一翻页计数器就清零,又变成1000了……所以这种控制数的方法是无效的。

  所以结论是,如果一个pager类的网页想要提前结束爬取,唯一的办法就是断网。当然,如果您有更好的解决方案,可以在评论中回复我,我们可以互相讨论。

  6.总结

  Pager 是一种非常常见的网页分页方法。我们可以通过 Web Scraper 中的 Element click 处理此类网页,并通过断开网络来结束爬取。

  ●简单的数据分析(六):Web Scraper翻页-抓取“滚动加载”类型的网页

  ●简单数据分析(二):Web Scraper尝鲜,抢豆瓣高分电影

  ●简单的数据分析(一):起源,了解Web Scraper和浏览器技巧

  ·结尾·

  图克社区

  采集精彩的免费实用教程

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线