excel抓取多页网页数据( WebScraper教程的全盘总结(13)创建SiteMap红尘小说网)

优采云 发布时间: 2021-11-25 07:10

  excel抓取多页网页数据(

WebScraper教程的全盘总结(13)创建SiteMap红尘小说网)

  

  这是简单数据分析系列文章的第13篇文章。

  不知不觉写了10个网络爬虫系列教程。这10篇文章基本涵盖了Web Scraper的大部分功能。今天的内容是本系列的最后一篇。下一章,我会开一个新洞,谈谈如何使用Excel对采集到的数据进行格式化和分析。

  下一篇文章我会把Web Scraper教程的完整总结放上来,今天开始我们的实战教程。

  之前的课程,我们爬取的数据都是同级别的内容。我们讨论的主要问题是如何处理市场上各种类型的分页,但是没有介绍如何抓取详情页的内容数据。.

  比如我们要抓取b站*敏*感*词*区TOP排行榜的数据:

  按照之前的爬取逻辑,我们爬取了这个榜单上作品的相关数据,比如下图中的排名、作品名称、浏览量、弹幕数、作者姓名等.

  

  经常逛B站的朋友也知道,UP主经常建议自己看视频三连操作(点赞+投币+采集)。可以看出这三个数据对视频的排名都有一定的影响,所以这些数据对我们也有一定的参考价值。

  

  遗憾的是,这份排行榜没有相关数据。这些数据在视频详情页,我们需要点击链接才能看到:

  

  今天的教程内容就是教大家如何在爬取一级页面(列表页面)的同时,使用Web Scraper抓取二级页面(详情页面)的内容。

  1.创建站点地图 鸿辰小说网

  首先,我们找到要捕获的数据的位置。我在下图中的红框中标出了关键路径。你可以比较一下:

  

  然后创建一个相关的SiteMap,这里我取了bilibili_rank的名字:

  

  2.创建容器选择器

  设置之前先看看,发现这个页面的排名数据是一次加载100条数据,不需要分页,所以这里的Type选为Element。

  其他参数比较简单,就不细说了(不明白的可以看我之前的基础教程)。这是一个截图供您参考:

  

  3.创建列表页子选择器

  子选择器这次要抓取的内容如下,都比较简单。你可以参考截图:

  Rank(num) 作品名称(title) 播放量(play_amount) 弹幕量(danmu_count) 作者:(author)

  

  

  这样做的话,其实可以抓取所有已知的列表数据,但是本文的重点是:如何抓取二级页面(详情页)的三元组数据?

  做了这么多爬虫,你可能已经发现,Web Scraper的本质就是模拟人的操作,达到爬取数据的目的。

  那么我们平时如何查看二级页面(详情页)呢?其实直接点击标题链接即可跳转:

  

  Web Scraper为我们提供了点击链接跳转的功能,即Type为Link的选择器。

  感觉有点抽象?让我们通过示例进行比较以理解。

  首先,在这种情况下,我们得到了标题的文本,此时的选择器类型为Text:

  

  当我们想要获取一个链接时,我们必须创建另一个选择器。选中的元素是一样的,但是Type是Link:

  

  创建成功后,我们点击Link type选择器,输入,然后创建相关选择器。下面我录了一张动图,注意我鼠标突出显示的导航路由部分,可以很清楚的看到这几个选择器的层次关系:

  

  4.创建详情页子选择器

  当您点击链接时,您会发现浏览器会在一个新的Tab页中打开详情页,但是在列表页上打开了Web Scraper选择窗口,您无法跨页面选择所需的数据。

  处理这个问题也很简单,可以复制详情页的链接,复制到列表页所在的Tab页,按回车重新加载,这样就可以在当前页面选中了。

  

  我们在 Link 类型的选择器中创建了更多的选择器。这里我选择了4个数据,比如点赞数、*敏*感*词*数、采集数和分享数。这个操作也很简单,这里就不赘述了。

  

  所有选择器的*敏*感*词*如下:

  

  我们可以看到video_detail_link节点收录了4个二级页面(detail pages)的数据。至此,我们的子选择器已经全部建立。

  5.获取数据

  终于到了激动人心的部分,我们要开始爬取数据了。但是在爬取之前,我们需要把等待时间调大一点,默认时间是2000ms,我这里改成了5000ms。

  

  你为什么这么做?看下图就明白了:

  

  首先,每次打开二级页面,都是一个全新的页面。这时候浏览器加载网页需要时间;

  其次,我们可以观察到要抓取的点赞量等数据。页面刚加载时,其值为“--”,过一会就变成一个数字。

  所以,我们只要等待5000ms,等页面和数据加载完毕后,一起爬取。

  配置好参数后,我们就可以正式抓取下载了。下图是我抓到的部分数据,特此证明此方法有用:

  

  6.总结

  本教程可能有点困难。我将分享我的站点地图。如果在制作时遇到问题,可以参考我的配置。我在第六个教程中详细讲解了SiteMap导入的功能。可以一起吃。:

  {"_id":"bilibili_rank","startUrl":["https://www.bilibili.com/ranking/all/1/0/3"],"selectors":[{"id":"container","type":"SelectorElement","parentSelectors":["_root"],"selector":"li.rank-item","multiple":true,"delay":0},{"id":"title","type":"SelectorText","parentSelectors":["container"],"selector":"a.title","multiple":false,"regex":"","delay":0},{"id":"author","type":"SelectorText","parentSelectors":["container"],"selector":"a span","multiple":false,"regex":"","delay":0},{"id":"play_amount","type":"SelectorText","parentSelectors":["container"],"selector":".detail > span:nth-of-type(1)","multiple":false,"regex":"","delay":0},{"id":"danmu_amount","type":"SelectorText","parentSelectors":["container"],"selector":"span:nth-of-type(2)","multiple":false,"regex":"","delay":0},{"id":"video_detail_link","type":"SelectorLink","parentSelectors":["container"],"selector":"a.title","multiple":false,"delay":0},{"id":"coin","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":"span.coin","multiple":false,"regex":"","delay":0},{"id":"collect","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":"span.collect","multiple":false,"regex":"","delay":0},{"id":"share","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":"span.share","multiple":false,"regex":"[0-9]+","delay":0},{"id":"num","type":"SelectorText","parentSelectors":["container"],"selector":"div.num","multiple":false,"regex":"","delay":0},{"id":"like","type":"SelectorText","parentSelectors":["video_detail_link"],"selector":".ops span.like","multiple":false,"regex":"","delay":0}]}

  一旦掌握了二级页面的抓取方式,三级、四级页面就没有问题了。因为例程是相同的:数据是在链接选择器指向的下一页上捕获的。因为原理是一样的,我就不演示了。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线