excel抓取多页网页数据( 如何查看二级页面(详情页)的三连数据?-八维教育)

优采云 发布时间: 2021-10-01 09:03

  excel抓取多页网页数据(

如何查看二级页面(详情页)的三连数据?-八维教育)

  

  

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

  做了这么多爬虫,你可能已经发现,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 一样,我调用自己的表单。编程递归中有一个术语。在计算机领域也是一个比较抽象的概念。有兴趣的同学可以自行搜索。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线