网页源代码抓取工具(【知识点】如何认识HTML源代码说到解析网页?)

优采云 发布时间: 2022-03-20 06:00

  网页源代码抓取工具(【知识点】如何认识HTML源代码说到解析网页?)

  文章目录​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

  上图已经神奇反转了,哈哈哈,想爬就爬,别拦着。

  识别 HTML 源代码

  说到解析网页,是不是需要我们自己先了解这些网页呢?

  看看这个页面:

  

  解析网页

  来,我们就拿这个网页来研究一下它的结构。其余网页是通用的。

  首先,可以看到在网页的左侧,输入框是彩色的。在网页的右侧,还有一个颜色代码,这个胖四是怎么回事?

  这称为标记、搜索或映射,无论您想如何称呼它。我们只需要知道左右两个颜色的地方是一一对应的。

  那么,如何根据页面元素查找对应的代码块其实并不难。

  

  先点击我圈出来的地方,然后点击网页上对应的元素。

  当我们专注于右边的代码时,我们可以看到很多三角形。稍微想一想,你就会知道那些三角形是上下层的关系。

  

  这些三角形是可扩展的。我们称每个三角形及其收录的所有内容为:标签。

  (当然有些没有三角形的也叫标签,比如)

  

  如何查看标签,以“”作为标签的结尾。

  这时候就会有兄弟标签和从属标签的区别。我习惯称它们之间的关系:父标签、子标签、兄弟标签、祖先标签。

  这些概念在稍后讨论 Xpath 标记提取时将非常重要,因此请记住。

  了解 Xpath

  XPath 是一种将 XML 文档的层次结构描述为关系的方法。因为 HTML 是由 XML 元素组成的,所以我们可以使用 XPath 从 HTML 文档中定位和选择元素。

  实际上有很多方法可以从网页源代码中提取数据。例如,有些人动不动就想出一个正则表达式。正则表达式在本系列的主干中没有提到,但最多是作为“附加文章”添加的。这是多么容易。

  有些人还使用beautifulsoup。当我还是初学者时,我也学习了这个库。后来发现有很多不便,所以决定放弃。

  其实并没有太大的不便,就是学了Xpath之后怎么看汤不顺眼。

  我们来看看他们三者的性能对比:

  爬取方式

  表现

  使用困难

  安装难度

  常规的

  快的

  困难

  内置模块

  美丽的汤

  慢

  简单的

  简单(纯 Python)

  lxml

  快的

  简单的

  不难

  你可以看到为什么美丽是缓慢的。在pycharm下,安装难度不大。

  Xpath使用过程

  看完Xpath的性能优势,我们再来看看Xpath是如何解析网页并获取我们需要的数据的。

  

  别着急,让我来解释一下图片。

  1、首先,导入Xpath支持的模块,位于lxml包里面的etree模块,如果用pycharm时出现“报错”,别管它,能运行的,历史遗留原因。<br />2、其次,获取网页源码,这里需要使用content方法来对获取到的网页数据进行转换,不能使用text。<br />3、接着,对转换出的数据进行编解码。不然会看到一堆的乱码。<br />4、HTML方法,没什么好说的。<br />5、xpath方法,这里需要传入参数为待提取标签的Xpath路径。关于这个路径,一会儿会讲。<br />6、批量提取,关于这个批量提取,一会儿也会讲。<br />7、没什么好说的了。

  Xpath 路径提取

  

  打开谷歌浏览器,在标签顶部右键,点击“复制”,在里面选择“复制Xpath”。如果没有问题,不要去“复制完整的 Xpath”。

  这里我们统一使用谷歌浏览器。

  这时候,我们就得到了相对的Xpath路径。

  Xpath 基本语法摘录

  Xpath 中有太多的语法,但我们一般不会用到那么多。无需死记硬背。我只为你挑选一些常用的。

  

  例子:

  

  

  还有一个text()方法需要注意,没必要做那么多花里胡哨的。

  Xpath函数封装

  现在Xpath部分已经差不多完成了,我们来封装函数,做一个小demo。

  如果要提取单个路径下的标签,可以使用以下方法:

  def get_data(html_data,Xpath_path):<br /> '''<br /> 这是一个从网页源数据中抓取所需数据的函数<br /> :param html_data:网页源数据 (单条数据)<br /> :param Xpath_path: Xpath寻址方法<br /> :return: 存储结果的列表<br /> '''<br /><br /> data = html_data.content<br /> data = data.decode().replace("", "") #删除数据中的注释<br /> tree = etree.HTML(data) #创建element对象<br /><br /> el_list = tree.xpath(Xpath_path)<br /> return el_list

  如果要从多个 Xpath 中提取数据,可以使用以下方法:

  def get_many_data(html_data,Xpath_path_list):<br /> '''<br /> 通过多个Xpath对数据进行提取<br /> :param html_data: 原始网页数据<br /> :param Xpath_paths: Xpath寻址列表<br /> :return: 二维列表,一种寻址数据一个列表<br /> '''<br /> el_data = []<br /><br /> data = html_data.content<br /> data = data.decode().replace("", "")<br /> tree = etree.HTML(data)<br /><br /> for Xpath_path in Xpath_path_list:<br /> el_list = tree.xpath(Xpath_path)<br /> el_data.append(el_list)<br /> el_list = [] #安全起见就自己清理了吧<br /><br /> return el_data

  至于要不要刷,看个人喜好了。

  Xpath实践爬取小demo

  做个小demo,搞定

  

  (图片已被替换,不知道为什么图片不合法)

  这里是热榜文字和网址,一一匹配。

  首先,我们查看以下页面:

  

  学得快的可以看到两条线索,有经验的可以看到三条线索:

  

  URL和文字都可以看,但如果我们想一次性全部拿走,我们需要查看其他几个标签的位置,然后找到我们需要的所有标签中最小的共同祖先标签。

  

  通过堆叠标签,我们可以很容易地看到它们都在​​​​

  上一篇:【从零开始,学Python爬虫不再难!!!】栏目介绍 |

  下一篇:从零开始,学Python爬虫不再难!!!--(1)简介:初识爬虫,打基础丨储能方案

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线