首页 > 编程语言 >Python爬虫利器之解析库的使用

Python爬虫利器之解析库的使用

时间:2023-03-31 10:12:36浏览次数:41  
标签:Xpath etree &# item Python 爬虫 利器 HTML 解析

对于一个刚学Python爬虫的新手来说,学习Python爬虫里面的「解析库的使用」如果没有超强记忆力,估计是边学边忘,正所谓好记性不如烂笔头,在自己学些爬虫相关的知识点可以记录下来然后多次实践肯定比单凭记忆力要记得牢,下面我就把我学习的一些解析库的知识整理出来,供大家参考下。

我的计划是,把自己学习记录的知识点,整理成读书笔记,节约大家自学的时间成本。话不多说,让我们一起来学习下这部分知识吧。

为什么要学习解析库

我们实现一个最基本的爬虫,提取页面信息时会使用正则表达式。正则表达式虽然提取信息速度很快,但是万一正则表达式有地方写错了,可能导致匹配失败,而且复杂项目的正则表达式很烦琐,那么有没有另一种方便快捷的方法呢?

当然有啦,Python以它强大的库功能,给我提供了高效的方法——解析库。

什么是解析库

解析库意思是解析某个特定的内容,一个爬虫的思路非常简单,即向服务器发起请求,得到响应后,根据返回的内容做进一步处理。一般返回的内容是网页的源代码,有时候还会是json数据。针对网页源代码,我们就需要用解析库来解析我们想要的内容。

常用的解析库有3种:

1、lxml

2、Beautiful Soup

3、pyquery

其中lxml库使用的是Xpath语法,是一种效率较高的解析方法,那么今天我们就详细介绍下Xpath的使用,此教程一共分为三篇,今天是第一篇。

什么是Xpath?

Xpath,全称XML Path Language,即XML路径语言,是一门在XML文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

所以在做爬虫时,我们完全可以使用Xpath来做相应的信息抽取。接下来介绍下Xpath的基本用法。

1、Xpath概况

Xpath选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了100个内置函数,用于字符串、数值、时间的匹配以及节点、序列的处理等。

2、Xpath常用规则

这个表格里的知识大家一定要掌握,并且要熟记于心,只有写出正确的表达式,才能写出正确的Xpath解析式,我们才能进行HTML的解析。

举例说明:

//title[@lang=‘eng’]

表示的是所有名称为title,同时属性lang的值为eng的节点。

3、准备工作

使用Xpath之前,首先要确保安装好lxml库。安装方法非常简单。

pip3 install lxml

4、实例引入

现在通过实例来感受一下使用Xpath对网页解析的过程,相关代码如下:

from lxml import etree

text= '''
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
'''

html = etree.HTML(text)
result = etree.tostring(html)
print(result.decode('utf-8'))

这里首先导入lxml库的etree模块,然后声明了一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个Xpath解析对象。这里需要注意的是,HTML文本的最后一个li节点是没有闭合的,但是etree模块可以自动修正HTML文本。

这里我们调用tostring()方法即可输出修正后的HTML代码,但是结果是bytes类型。这里利用decode()方法将其转成str类型,结果如下:

<html><body><div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</li></ul>
</div>
</body></html>

我们可以看到,经过处理之后,li节点标签被补全,并且还自动添加了body、html节点。

另外,也可以直接读取文本文件进行解析,示例如下:

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))

其中test.html的内容就是上面例子中的HTML代码,内容如下:

<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>

这里需要注意的是,为了成功运行程序,需要新建一个名为test.html的HTML文件,而不是像上面那样简单的进行声明。

这次的输出结果略有不同,多了一个DOCTYPE的声明,但是对解析无任何影响,结果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>&#13;
<ul>&#13;
<li class="item-0"><a href="link1.html">first item</a></li>&#13;
<li class="item-1"><a href="link2.html">second item</a></li>&#13;
<li class="item-inactive"><a href="link3.html">third item</a></li>&#13;
<li class="item-1"><a href="link4.html">fourth item</a></li>&#13;
<li class="item-0"><a href="link5.html">fifth item</a>&#13;
</li></ul>&#13;
</div></body></html>

总结

今天我们介绍了什么是Xpath,Xpath有什么用,以及Xpath如何使用等知识,关于Xpath我计划写三篇文章,今天这篇主要是基础知识的介绍,第2篇详细介绍Xpath的操作,第3篇则是带大家一起实战练习。

标签:Xpath,etree,&#,item,Python,爬虫,利器,HTML,解析
From: https://www.cnblogs.com/q-q56731526/p/17275335.html

相关文章

  • 简单介绍python列表元素拼接成字符串的4种方法
    本文主要介绍了python列表元素拼接成字符串的4种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧前言我们在分析列表数据时,常常需要对列表数据进行输出或多列表关联拼接。直接使用列表,列表中的各元素以逗......
  • [Python]异步concurrent.futures并发
    '''concurrent.futures模块提供异步执行可调用对象高层接口,使用线程池ThreadPoolExecutor或进程池ProcessPoolExecutor来实现异步。目的是保证服务稳定运行的前提下提供最大的并发能力。'''fromconcurrent.futuresimportFuturefromconcurrent.futuresimportThrea......
  • use macOS terminal can not install MicroPython on Raspberry Pi Pico bug All In O
    usemacOSterminalcannotinstallMicroPythononRaspberryPiPicobugAllInOne使用macOS终端无法在RaspberryPiPico上安装MicroPythonbugMicroPython环境搭建您可以通过USB将Pico连接到计算机,然后将文件拖放到它上面来对Pico进行编程,因此我们整理了......
  • python+playwright 学习-43 Pyinstaller打包生成独立的可执行文件。
    前言playwright与Pyinstaller结合使用来创建独立的可执行文件。本地化安装有同学提到说想打成一个exe的独立包,但是执行playwrightinstall会默认把chromium,firefox和webkit三个浏览器安装到系统目录。这样打包的时候就找不到启动的浏览器文件。于是就想到把浏览器文件下......
  • Python魔力方法
    Python的魔术方法(MagicMethods)也称为双下划线方法(doubleunderscoremethod),以双下划线开头和结尾,用于重载类的特殊行为。可以使类的实例对象表现出像内置类型的行为,如加、减、乘、切片、比较等,增加代码的可读性和可维护性。以下是Python中一些重要的魔术方法:1.__init__方法__in......
  • python基础学习总结
    python关键字也是以下划线或者字母开头。python关键字可以通过导包获取关键字如下: ['False','None','True','and','as','assert','async','await','break','class','continue'......
  • [Python]异步回调函数
    importasynciofromfunctoolsimportpartialfromasyncioimportFutureasyncdeff1():print(1)awaitasyncio.sleep(2)print(2)return"f1"defcallback1(future:Future):print(future.result())print("我是f1的回调函数&......
  • Python 3 vs Python 2 All In One
    Python3vsPython2AllInOnePython3.x与Python2.x版本区别https://www.runoob.com/python/python-2x-3x.htmlhttps://www.datacamp.com/blog/python-2-vs-3-everything-you-need-to-knowprintvsprint()如果Python2.x版本想使用使用Python3.x的print函......
  • Python 脚本接收命令行参数的多种方式 All In One
    Python脚本接收命令行参数的多种方式AllInOnesysargparseshellscripttensorflow...sys#!/usr/bin/envpython3#coding:utf8importsysargs=sys.argvprint("argslength:",len(args))print("argstype:",type(args))print("fu......
  • 跟着查老四学Python Day 3:数据结构与函数
    老猫:请您扮演一个python讲师,帮助一个没有代码经验的人自学python,以下是此前你设置的学习计划制定学习计划:将学习过程分为四个阶段,每个阶段关注不同的内容。第一周:掌握Python基础语法、数据类型、控制结构等。同时,学会如何在本地搭建Python开发环境。第二周:学习函数、模块、文件操......