Python爬虫

Python爬虫 知识量:11 - 28 - 71

3.3 使用lxml解析网页><

lxml- 3.3.1 -

lxml 是一个 Python 库,用于解析 XML 和 HTML 文档。它是一个非常快速、轻量级且易于使用的库,具有丰富的功能和灵活的 API。

lxml 的特点包括:

  • 快速:lxml 使用了 libxml2 和 libxslt 这两个高效的 C 库,因此其性能非常出色,特别是对于大型 XML 和 HTML 文档。

  • 易用:lxml 提供了简单易用的 API,使得处理 XML 和 HTML 数据变得非常容易。它支持各种常见的操作,如遍历树形结构、搜索和修改元素等。

  • 兼容性:lxml 支持 Python 2 和 Python 3,并且可以与多种操作系统兼容。

  • 灵活性:lxml 支持多种 XML 和 HTML 解析器,可以根据需要进行选择。此外,它还支持自定义元素和属性等操作。

使用 lxml 可以方便地解析 XML 和 HTML 文档,提取数据并进行进一步的处理。它是一个非常强大且灵活的库,适用于各种 XML 和 HTML 处理任务。

lxml的安装- 3.3.2 -

lxml的安装可以通过多种方式进行,以下是其中的几种常见方法:

1. 使用pip安装:打开命令提示符或终端窗口,输入以下命令:

pip install lxml

如果系统中同时安装了 Python 2 和 Python 3,可能需要使用 pip3 代替 pip。

2. 下载源代码安装:如果想要从源代码安装 lxml,可以访问 lxml 的官方网站下载源代码包。解压源代码包后,进入该目录,然后使用以下命令进行安装:

python setup.py install

3. 使用虚拟环境:如果想在虚拟环境中安装 lxml,可以创建一个虚拟环境,并在其中使用 pip 进行安装。以下是在 Windows 系统中使用虚拟环境安装 lxml 的示例:

python -m venv myenv    
myenv\Scripts\activate  # 在 Windows 上运行      
pip install lxml

无论选择哪种方法安装 lxml,都需要确保计算机已经安装了 Python,并且已经正确配置了 Python 的环境变量。在安装过程中,如果出现任何依赖库缺失的问题,可以根据需要安装相应的库。

使用lxml解析网页- 3.3.3 -

使用lxml解析网页的步骤与使用Beautiful Soup类似,以下是使用lxml解析网页的基本步骤:

1. 导入所需的模块:

from lxml import html    
import requests

2. 发送 HTTP 请求并获取网页内容:

url = 'http://example.com'  # 替换为要解析的网页的 URL  
response = requests.get(url)  
content = response.content

3. 解析网页内容:

tree = html.fromstring(content)

4. 使用 lxml 的选择器查找要提取的元素:

# 查找所有标题元素  
titles = tree.xpath('//h1')  
for title in titles:  
    print(title.text)

5. 对提取的元素进行进一步处理:

# 查找第一个链接元素并提取链接地址  
link = tree.xpath('//a/@href')[0]  
print(link)

6. 对提取的数据进行其他操作,例如提取特定属性、文本内容等。例如,提取所有链接的文本内容:

# 查找所有链接元素并提取文本内容  
links = tree.xpath('//a')  
for link in links:  
    print(link.text)

XPath的选取方法- 3.3.4 -

XPath 是一种在 XML 文档中查找信息的语言,它也可以用在 HTML 上,因为 HTML 是基于 XML 的。XPath 的选取方法非常强大和灵活,以下是一些主要的选取方法:

  1. 相对路径选择:使用 "//" 可以从当前节点往下寻找所有的后代元素,不管在什么位置。例如,寻找 html 节点下的 body 节点下的所有元素,可以使用 "//html//body"。

  2. 绝对路径选择:使用 "/" 可以从根节点选取所有的后代元素。例如,寻找 html 节点下的 head 节点下的所有元素,可以使用 "//html//head"。

  3. 根据属性选择:使用 "[@属性名=‘属性值’]" 可以根据属性选择元素。注意,属性名前必须加 @,属性值一定要有引号,单双引号皆可。例如,寻找 body 节点下的 div 节点下的属性名为 all-content、content-head、fn-clear 的所有元素,可以使用 "//body//div[@class='all-content content-head fn-clear']"。

  4. 根据次序选择:使用 "[n]" 可以根据次序选择元素。注意,索引值从 1 开始。例如,寻找 div 节点下的属性名为 content、fn-clear、card-wrap 的 li 节点下的第二个元素,可以使用 "//div[@class='content fn-clear card-wrap']//li[2]"。

  5. 多路径(组)选择:使用 "xpath表达式1|xpath表达式2|xpath表达式3" 可以匹配多路径元素。例如,寻找 div 节点下的属性名为 car-box 的 ul 节点下的 li 节点1和2下的 h4 元素,即获取汽车的表显里程和上牌时间的元素,可以使用 "//div[@class='car-box']//ul//li[1]//h4|//div[@class='car-box']//ul//li[2]//h4"。