前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >年轻人的第0条爬虫 | 如何最快理解工具思维_以八爪鱼为例

年轻人的第0条爬虫 | 如何最快理解工具思维_以八爪鱼为例

作者头像
KKCHANNEL
发布2022-09-16 16:53:54
9030
发布2022-09-16 16:53:54
举报
文章被收录于专栏:KKCHANNEL技术产品

(请去网易云音乐听原版,QQ音乐属实拉跨)

软件和代码大多数情况都只是用于解决问题的工具。对于使用者而言,理解工具的设计思路使用逻辑,而不是纠结于工具使用的技巧tricks,才能快速上手并对同类型工具触类旁通,用最高效率解决问题。

0. 背景知识/准备

八爪鱼网页数据采集器,是一款使用简单、功能强大的网络爬虫工具,完全可视化操作,无需编写代码,内置海量模板,支持任意网络数据抓取。

可以简单地理解为,八爪鱼把代码封装为模块,通过模块拼接搭建流程图,帮助小白批量获取网页中的html代码并清洗为数据,实现批量获取评论、列表信息等简单的数据爬取。

流程图的亚子

0.1 DOM 树

DOM Tree是指通过DOM将HTML页面进行解析,并生成的HTML tree树状结构和对应访问方法。借助DOM Tree,我们能直接而且简易的操作HTML页面上的每个标记内容。

(这里模糊了DOM树和html结构的概念,仅为方便理解结构)

DOM树展示了html页面(即通常意义上理解的“网页”)的基本结构,由标签组成。

引用自深圳大学《数据抓取与清洗》课程课件

标签之间是包含/被包含和并列的关系,因此可以逐级展开;标签有不同的类型,带有属性值

我们需要抓取的数据就隐藏在具有某些特征的标签中

浏览器根据html代码解析出DOM树,进而才能渲染出页面中的元素。也就是说,页面的布局和标签的位置关系是息息相关的。

0.2 Chrome浏览器

其实大部分浏览器都能用,但是Chrome应该是最受代码民工们喜爱全能的一款。其他浏览器如果能找到相应的功能也不影响使用,此处仅以Chrome为例。

调试模式 在Chrome中按f12(部分笔记本是fn+f12)可以打开调试模式,看到html代码的详细结构,便于我们观察和定位标签,理解DOM树。选中标签,网页中对应被渲染的元素会高亮。

选中元素Ctrl+Shift+C或点击调试界面左上角图标,可以切换至选中元素模式,点击页面中的元素可以看到代码中相应的标签。如果不点击,让光标悬浮在元素上,也可以看见元素相关信息的浮窗

按钮位置

选中效果

• xpath插件(选用) xpath是与DOM树结构有关的一种相对路径,便于定位元素。通俗地讲,我们打开电脑文件夹时的路径也是一种类似xpath的相对路径,文件夹的储存架构本身就是树形结构。插件比较多,可自行上网查找。等我有空再具体分析xpath的应用案例,这周代码敲不完了。 XPath教程 https://www.w3school.com.cn/xpath/index.asp

0.3 勇敢的心

• 善用搜索引擎 有问题先尝试查询可能已有的解答,你踩过的坑大概率有前人踩过。当然也要抱着辨证眼光看待,放错误的错误解决方式的人才实在太多了!!!! • 耐心试错 代码或流程图无法一次跑通,是 非常!非常!非常! 正常的事情,所以一定要耐心、平心静气地把问题找出来,不然就会出现和我一样通宵debug第二天早上发现把left跟right写反的问题 • 通过观察运行情况寻找问题 有时候问题不是一眼能看出来的,需要我们在运行过程中观察,比如翻页、划动之类的操作可能应用位置不对或者过多/过少了,这就需要我们在运行的时候观察浏览器是怎么动的。这类工具的本质是模拟人的行为,我们可能从行为不一致的地方发现问题。 • 先确认可用部分再修改不可用部分 东改一下,西改一下也很难具体定位问题。所以需要先保证有一部分完全能用,必不可能出错,出错就把电脑吃掉以后再继续修改别的部分,否则可能会出现一直在正确的part修改,却被没发现错误的part干扰的问题。 • 抱大腿 不懂就问,懂得都懂。

1. 理解工具思维

1.1 通读软件界面和菜单

无论是什么工具,尝试尽所有的交互和功能是了解软件使用逻辑的最好方式。哪怕是看不懂的选项和功能,也可以百度或暂时跳过,先大概了解工具能干些啥。

比如八爪鱼的ajax加载。ajax是一种网页的一种异步加载机制,简单说就是不一次性展示所有数据,这就属于可以先记住,要用再学的部分。

1.2 工具的本质

爬虫编程与爬虫软件的本质是模拟人在浏览器中浏览的过程。爬虫编程是模仿人发送和解析请求。而八爪鱼模仿人的视野选择判断哪些数据是要收集的,再用人的方式完成滚动加载、点击按钮、翻页等操作。

本质上爬虫只是代替人意志的工具人,任劳任怨地帮你把重复性工作高效完成。所以在使用和修改的过程中,也是会尽量遵循人的行为习惯的。

1.3 善用已编写好的傻瓜功能

在八爪鱼中,傻瓜功能主要是模板和“自动识别网页”。

模板只要不过时,一般都可以直接用,软件中也有详细的引导。

自动识别网页主要是总会在一些比较奇特的结构部分出错,这时候就需要手工改正,主要会观察xpath的路径是否被软件识别错。自动识别得到的xpath一般是用固定序号编写的,比较死板。

在修改错误时也可以观察自动识别中已确认可用的部分,看看对于这个列表而言,正确的xpath大概是怎样编写的,在软件识别出的xpath基础上进行修改,这也符合先确认可用再修改不可用的原则。

2. 观察结构找同异

需要爬取的数据标签大多有相似的结构,以下介绍几种可行的判断标准,总的来说都会是某种列表中。有可能是传统的有序或无序列表中,也有可能是依次排列的块级元素中。

2.1 标签名

• <ul> 是页面中的无序列表。列表中的每一项使用<li> • <ol> 是页面中的有序列表。列表中的每一项使用<li> • <div> 以下直接引用定义

HTML<div>元素是块级元素,它是可用于组合其他 HTML 元素的容器。<div>元素没有特定的含义。除此之外,由于它属于块级元素,浏览器会在其前后显示折行。

• <p> 表示页面中的段落。 • <h几> 表示页面中的标题。“几”表示标题字体大小,1-6数字越小字体越大。 • …… 还有很多其他种类的标签,这里只是列举了几种一般会用来作为列表收纳数据标签的标签,具体可自行查阅。

参考链接:

HTML 段落 https://www.w3school.com.cn/html/html_paragraphs.asp

HTML 块 https://www.w3school.com.cn/html/html_blocks.asp

HTML 列表 https://www.w3school.com.cn/html/html_lists.asp

HTML 标题 https://www.w3school.com.cn/html/html_headings.asp

2.2 标签属性

不同种类的标签往往有不同种类的属性。比较通用的用于辨识某特殊种类标签的属性就是类class和id。

• class class用于表示同一类标签,有了class的标签可以被统一使用样式,在这里最大的用处是辨别标签。同一个标签的class属性可能有多个值。 假设在学校网站中爬取学生信息(当然这基本不可能),比如学生的标签中就应该有class="学生",教师的标签中有class="教师";网新系学生的标签的“class”可能还包含"网新系",计科系学生的标签的class相应可能包含"计科系"。 使用class可以快速定位到某一类需要被抓取的元素,也方便编写xpath识别。 • id HTML id 属性用于 为HTML 元素指定唯一的 id。一个 HTML文档中不能存在多个有相同 id 的元素。

参考链接:

HTML 属性 https://www.w3school.com.cn/html/html_attributes.asp

HTML 类 https://www.w3school.com.cn/html/html_classes.asp

HTML id 属性 https://www.w3school.com.cn/html/html_id.asp

2.3 相对位置

有些情况下,数据存储在同类标签下的更深层级的标签中,这时候就需要使用相对位置判断。这里很难解释清楚,所以接下来用一个作业进行讲解。

• 固定的序号或间隔(如 /div[1] ) 这种情况中,数据标签可能是大标签下的第x个小标签。 • 节点/元素间的父子亲属关系(xpath中的轴)比较复杂,等我用会了再说。

3. 案例解释

问题:爬取爱奇艺电视剧列表中,每个电视剧的信息。

  1. 打开入口页面 https://v.qq.com/channel/tv?_all=1&channel=tv&listpage=1&sort=19
  2. f12打开调试模式,可以选中包含所有电视剧item的大框。在对应的代码部分中可以看到,大框最外部是一个div,class="mod_figure mod_figure_v_default mod_figure_list_box"。

其中又包含了许多小div,class="list_item",没错,这应该就是指代每个电视剧的卡片item了。

那么爬取电视剧数据的循环列表应该就是这个大框,xpath可能是//div[@class="mod_figure mod_figure_v_default mod_figure_list_box"]/div,当然还需要继续验证。

  1. 打开list_item观察结构的同时也要对应观察右边高亮的元素具体是哪些。大部分数据都不难定位,比如可以看见“电视剧标题”应该是list_item展开后的第一个a标签的title属性,或第一个div块下第一个a标签的title属性或文字部分,都可以尝试编写相对于列表的xpath,如第一个就是/a[1],抓取数据方式选择“属性title的值”。
  1. 再举一例。想抓取每个电视剧卡片右上角的标识,发现选择元素选不中。于是可以继续打开代码中的标签,逐级查找高亮部分,最后定位至其中一个VIP标识的img标签的class属性为"mark_v mark_v_VIP",这里的class有两个属性值,猜测第二个属性值表示VIP标志。

再往下查找,发现“超前点播”标识的class="mark_v mark_v_超前点播",那么此时这类标识的共同特征已经很明显了,是class="mark_v",编写xpath时只需要针对这个特性即可,然后再通过观察发现可以用alt属性值区分具体标签。

4.总结

以上是我自己对于“理解工具,快速上手”的一些思考,有疑问处欢迎后台留言或私信。本周代码抄不完了

下次有空再写一些工具使用的技巧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KKCHANNEL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 背景知识/准备
    • 0.1 DOM 树
      • 0.2 Chrome浏览器
        • 0.3 勇敢的心
        • 1. 理解工具思维
          • 1.1 通读软件界面和菜单
            • 1.2 工具的本质
              • 1.3 善用已编写好的傻瓜功能
              • 2. 观察结构找同异
                • 2.1 标签名
                  • 2.2 标签属性
                    • 2.3 相对位置
                    • 3. 案例解释
                    • 4.总结
                    相关产品与服务
                    云点播
                    面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档