📅  最后修改于: 2023-12-03 15:23:25.919000             🧑  作者: Mango
lxml 是一个 Python 库,用于处理 XML 和 HTML 文档,提供了方便的 API 以及解析效率高的特性。在网页抓取中可以使用 lxml 库来解析 HTML 文档,获取所需的数据。
可以通过 pip 安装:
pip install lxml
使用 lxml 库,首先需要导入 lxml.etree
模块,并使用 lxml.html.fromstring()
函数将要解析的 HTML 文档转化为 Element 对象。
from lxml import etree, html
# 获取 HTML 文档
html_doc = requests.get(url).content
# 将 HTML 转化为 Element 对象
root = html.fromstring(html_doc)
然后就可以使用 Element 对象上提供的 API,如 xpath()
、findall()
、find()
来获取所需的数据。例如,要获取页面中所有的链接文本和链接地址,可以使用以下代码:
# 获取页面中所有的链接
links = root.xpath('//a')
# 遍历链接,获取链接文本和链接地址
for link in links:
text = link.text_content()
href = link.get('href')
print(text, href)
XPath 是一种用于在 XML 或 HTML 文档中进行查询的语言。在 lxml 库中,xpath()
函数可以接受一个 XPath 表达式作为参数,返回匹配该表达式的所有元素。
XPath 表达式可以非常灵活地定位文档中的元素,以下是一些常用的表达式:
//tagname
: 匹配文档中所有的 tagname
元素。/tagname
: 匹配文档根节点下第一级的 tagname
元素。tagname[@attribute='value']
: 匹配所有具有指定属性和属性值的 tagname
元素。tagname[position()=1]
: 匹配第一个 tagname
元素。tagname[last()]
: 匹配最后一个 tagname
元素。例如,要获取页面中所有 <h2>
标签的文本内容,可以使用以下的 XPath 表达式:
# 获取页面中所有的 h2 标签
h2_tags = root.xpath('//h2')
# 遍历 h2 标签,获取文本内容
for h2 in h2_tags:
print(h2.text_content())
除了 XPath 表达式外,lxml 库还提供了支持 CSS 选择器语法的 cssselect()
函数,可以用来查询 HTML 文档中的元素。以下是一些常用的 CSS 选择器:
tag
: 匹配文档中所有的 tag
元素。.class
: 匹配所有具有指定 CSS 类名的元素。#id
: 匹配具有指定 id 属性的元素。tag[attr=value]
: 匹配所有具有指定属性和属性值的 tag
元素。例如,要获取页面中所有 class
属性为 title
的元素文本内容,可以使用以下代码:
# 获取所有 class 属性为 title 的元素
elements = root.cssselect('.title')
# 遍历元素,获取文本内容
for elem in elements:
print(elem.text_content())
以上是在 Python 中使用 lxml 库实现网页抓取的介绍,lxml 库提供了方便的 API 以及解析效率高的特性,可以大大简化网页抓取的过程。通过本文的介绍,相信大家已经有了一定的了解,可以在实际项目中灵活运用。