excel抓取多页网页数据( 如何查看二级页面(详情页)的三连数据?-八维教育)
优采云 发布时间: 2021-10-01 09:03excel抓取多页网页数据(
如何查看二级页面(详情页)的三连数据?-八维教育)
如果这样做,实际上可以抓取所有已知的列表数据,但本文的重点是:如何抓取二级页面(详细信息页面)的三元组数据?
做了这么多爬虫,你可能已经发现,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}]}
一旦掌握了二级页面的抓取方式,三级、四级页面就没有问题了。因为套路都是一样的:先创建Link选择器,然后抓取Link选择器指向的下一页数据,我就不一一演示了。
今天我们也来聊聊Web Scraper的翻页技巧。
此更新的灵感来自一位读者。他想用网页爬虫抓取一个寻呼机分页的页面,但是发现我之前介绍的寻呼机翻页方法不起作用。我研究了一下,发现我错过了一个非常常见的翻页场景。
在网页爬虫翻页-翻页的文章中,我们讲过如何使用Element Click选择器模拟鼠标点击分页器进行翻页,但在豆瓣TOP 250上放同样的方法,翻时页面到达第二页,抓取窗口会自动退出,无法抓取数据。
其实最主要的原因是我没有明确说明这个方法的适用边界。
通过元素点击在分页器上点击翻页仅适用于网页不刷新的情况。我举了一个蔡徐坤在传呼机文章的微博评论的例子。翻页时网页不刷新:
仔细看下图,链接变了,但是刷新按钮没变,说明网页没有刷新,但是内容变了
在豆瓣TOP 250网页上,每次翻页都会重新加载网页:
仔细看下图,网页在链接变化时刷新,并且有明显的加载圆圈*敏*感*词*。
其实这个原理从技术规范中已经很好的解释了:
-当URL链接为#字符且数据发生变化时,网页不会刷新;
-当链接的其他部分发生变化时,页面会刷新。
当然,这只是随便提一下,有兴趣的同学可以去这个链接学习,不感兴趣的可以跳过。
1.创建站点地图
本文文章将讲解如何使用Web Scraper抓取翻页时会刷新页面的pager网站。
对于这个网页,我们选择了网站-豆瓣电影TOP250,这是第一个练习爬虫的:
像这种网站,我们需要使用Link选择器来帮助我们翻页。我们在上一节中介绍了 Link 标签。我们可以使用这个标签跳转到一个网页并从另一个网页抓取数据。这里我们使用Link标签跳转到下一页分页网站。
首先我们使用Link选择器选择下一页按钮,具体配置如下图所示:
这里有一个特殊的地方:Parent Selectors——父选择器。
我们以前从未接触过这个选择框的内容。Next_page 这次将有两个父节点——_root 和 next_page。按键盘上的 shift 键,然后单击鼠标选择多个选项。先按我说的做,以后再做。解释这样做的原因。
保存next_page选择器后,在同级下创建一个容器节点来抓取电影数据:
这里注意:页面选择器节点next_page和数据选择器节点容器在同一层级,两个节点都有两个父节点:_root和next_page:
因为重点是网页爬虫翻页技巧,所以我只简单的抓取了一下我抓取的数据的标题和排名:
然后我们点击Selector图查看我们写的爬虫结构:
可以清晰的看到这个爬虫的结构,可以无限嵌套:
点击Scrape,尝试爬取,你会发现所有的数据都爬下来了:
2.分析原理
按照上面的过程,你可能还是会一头雾水。数据被捕获了,但是为什么这个操作可能呢?为什么 next_page 和 container 处于同一级别?为什么他们同时选择两个父节点:_root 和 next_page?
麻烦的原因是我们在逆向说话,从结果逆向步骤;下面我们就从正面思考来一步步讲解。
首先我们要知道我们爬取的数据是一个树状结构。_root 代表根节点,也就是我们抓取的第一个网页。我们应该在这个网页上选择什么?
1.一个是下一页的节点,本例中是Link选择器选择的next_page
2. 一个是数据节点,在这个例子中是元素选择器选择的容器
因为next_page节点会跳转,所以会跳转到第二页。除数据不同外,第二页与第一页结构相同。为了继续跳转,我们必须选择下一页。为了捕获数据,我们必须选择数据节点:
如果我们逆向箭头,就会发现真相就在眼前。next_page 的父节点不就是_root 和next_page 吗?容器的父节点也是_root和next_page!
到这里基本就真相大白了,不明白的同学可以多看几遍。和 next_page 一样,我调用自己的表单。编程递归中有一个术语。在计算机领域也是一个比较抽象的概念。有兴趣的同学可以自行搜索。