定位映射提高网页采集精度——以B站视频采集为例

2020-12-1 16:35| 发布者: Fuller| 查看: 11352| 评论: 0

摘要: 这一章我们将讲解怎样通过映射定位标志,相当于在网页上精准地划定网页块范围,可以提高数据采集规则的精确度和适应性,降低网页变化带来的影响。下面用B站视频作为案例,详细讲解操作步骤。 ... ... ... ... ... .. ...

配套软件版本:V10及更高 数据管家——增强版网络爬虫

老版本对应教程:V9及更低 集搜客网络爬虫 的对应教程是《定位标志精确采集范围——以安居客租房采集为例


定位映射不是必须的操作步骤,但是可以大大提高采集规则的适应性和采集精度,建议尽量做上定位映射,尤其是批量采集的情况下。

前面《采集网页数据》一章讲了用直观标注的方式,在网页上点选内容就能自动生成采集任务,《如何管理网络爬虫线索》讲了批量添加链接,进行批量采集。如果在批量采集时遇到失败,一般原因是任务的适应性不够。

这一章我们将讲解怎样通过映射定位标志,相当于在网页上精准地划定网页块范围,提高数据采集任务的精确度和适应性,降低网页变化带来的影响。另外,关键内容勾选不当,也是批量采集失败的主要原因之一,在本篇教程的最后 第6.部分讲了怎样去掉关键内容勾选。


案例

采集规则:定位教程规则_B站视频采集(可点击下载

样本网址:https://www.bilibili.com/video/av84023998?from=search&seid=15236207745993748996

采集内容:标题、播放数、弹幕数、发布时间


定义任务过程中,内容标注、测试、保存规则,启动采集等操作,可以参考教程《采集网页数据》,下面用B站作为案例,详细讲解定位映射操作。

1. 对抓取内容做定位映射

我们现在已经做好了一个任务,如下图所示,采集B站上的某个视频的标题、播放数、弹幕数、发布时间。以播放数为例,讲解怎样做定位映射。

可以看到,给抓取内容做定位映射,其实就是找到对应节点的@class值或者@id值,并定位映射给抓取内容。

注意1. 上面这个例子,点击一下抓取内容,正好对应到一个有@class值的DOM节点,而且这个值是view,很有意义,代表了播放。所以正好可以拿来做定位映射。

注意2. 点击“标题”直接定位到的节点span,它的属性@class=’tit’,但是它的上级节点H1的属性@class=’video-title’,属性值更加明确,所以我们可以选择H1节点来做定位映射。


 B站视频页面的HTML做的很规范,很多class的值都代表了网页内容具体的含义,比如刚才做定位映射的“播放数”的class是“view”,翻译过来就是“播放”的意思,“view”下面节点的class是“dm”,就是弹幕拼音的缩写,选择这种class做定位映射很合适。

2. 没有属性值的节点该怎样做定位

有些抓取内容,比如网页上的“发布时间”,对应到的DOM节点没有@class值或者@id值。需要在DOM窗口继续找上层的DOM节点,看看有没有合适的@class值或者@id值,再做映射。向上找到了DIV这个节点,它的@class=‘video-data’,把它映射给发布时间。要注意,找的越远,越不合适。


3. 查看映射关系

做完映射后,点击整理箱中的抓取内容,在下面的查看映射关系窗口中可以看到,抓取内容的节点编号,定位节点的编号和定位属性值。


4. 定位映射的技巧

技巧1:切换使用

class和id值都有的节点,做定位映射后会优先使用id,如果我们需要切换为class,可以在抓取内容中设置切换。


技巧2:整理箱的定位偏好

定位偏好是爬虫自动选择合适的定位标志,肯定没有手工做定位映射那么合适,但是不用一个个做定位映射。

如果发现抓到空白信息或错位信息,需要调整抓取内容的自动定位,可以更换合适的定位类型,通常选择“绝对定位”可以解决,这个修改是对整理箱生效的,也可以与定位映射同时使用。更多方法见教程《做定位标志后抓到空/重复的信息,怎么解决


技巧3: 同一个定位标志值可以映射给多个抓取内容。

5. 对整理箱顶层节点做上定位映射

给整理箱的顶层节点做定位标志,不是必须的,只有做了抓取内容的定位映射后,还没有解决问题,可以做这个尝试。而且一般是对详情页面,才会做顶层节点的定位。对于用样例复制采集的列表页面,不能做顶层节点的定位标志映射。如果做了,就要取消掉样例复制,直接用定位标志采集列表

我们要在网页上采集数据,往往要采集的数据是在网页某个区域范围内,我们希望把这个范围告诉爬虫,让采集更精准。通过对整理箱的顶层节点做定位,来达到这个目的。

整理箱的顶层节点是什么,在哪里?

在网页上定义采集任务,第一次直观标注的时候,要求输入一个表名,这个表名就是数据表的名字,整理箱的名字,也是顶层节点的名字。

比如我们这个例子中,设定的表名为detail。整理箱最顶层节点的名字就是detail。




我们希望给detail做个定位,覆盖到所有的抓取内容。

首先找到包含所有抓取内容的DOM节点。方法是:先点击网页上的一个抓取内容,观察下面的DOM窗口,光标会定位到一个节点上,在DOM树上往上级节点寻找,每点击一个DOM节点,可以看到网页上有联动,蓝框包围的网页区域越来越大。直到这个区域覆盖了所有的抓取内容。这个DOM节点就可能是我们要找的定位节点。

之所以说可能是,因为这个节点还要符合一个条件,要有class或者id属性。在这个页面上,@class='l-con'的DIV节点,就是我们要找的包含所要抓取内容的DOM节点。

用鼠标右键这个节点:定位映射->detail     detail是整理箱的顶层节点。这样我们给整个采集任务划定了一个采集范围。


注意1:做定位映射的节点必须有属性值:@id值或者@class值

注意2:在@id和@class之间选择时,如果id值就是一串数字,很可能每个网页的这个id值都不一样,就不能选,所以要观察对比一下,要找有代表性的。

注意3:划定的网页范围既能包括所有抓取内容,又要尽量小。如果尽量小的范围中找不到合适的定位标志,那就别做定位标志了。


6.关键内容的勾选

批量抓取失败,还有一个原因是关键内容的勾选。在网页上直观标注的时候,系统默认给每个抓取内容都勾选了关键内容,意思是说,爬取数据的时候,爬虫要在每个网页上采集到这些关键内容的数据,才算成功,否则就是失败。

但是,可能有些抓取内容并不是所有网页都有的。比如本例中的B站视频,不是每个视频都有弹幕,所以要对弹幕取消勾选关键内容。一般在实际操作中,像这样的详情页面,只勾选一个必会出现的关键内容既可,把其它的关键内容都取消勾选。






上篇文章:《内容映射》                                                  下篇文章:《网络爬虫软件翻页采集列表数据


2

鲜花
1

握手

雷人

路过

鸡蛋

刚表态过的朋友 (3 人)

最新评论

GMT+8, 2024-10-4 18:58