【Python 实战】XPath 采集数据
lxml
lxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如 <a>
,<img>
,<form>
,<ul>
,<li>
,<ol>
,<dl>
,<dt>
,<dd>
等。lxml 还支持使用正则表达式来解析和呈现 XML 和 HTML。
本文我们就介绍 lxml 的使用方法,我们使用 lxml 获取我们想要的数据。
发送请求
首先,我们要进行数据来源分析,知道我们的需求是什么?
明确需求:
明确采集网站是什么?
明确采集数据是什么?
我们都玩过 4399 小游戏,我们想获取游戏名称和游戏链接,并保存下来。首先,我们导入相关的库文件。
接下来,我们可以发送请求,获取网页源代码,代码如下。
这段代码是一个 Python 的 requests
模块的示例代码,用于从 https://www.4399.com/flash_fl/2_1.htm
这个网站上获取数据并将其转换为 HTML 格式。
首先,我们定义了一个 url
变量,它包含了要从网站上获取数据的 URL。然后,我们使用 headers
字典来设置请求头,包括 user-agent
头部,用于指定浏览器的 User-Agent 信息。
接下来,我们使用 requests.get()
函数来发送一个 HTTP GET 请求,并将 headers
字典作为请求头传递给它。这个函数会返回一个 Response
对象,我们可以使用 res.encoding
属性来获取请求的编码方式,并将其设置为 res.apparent_encoding
,以便在输出 HTML 时使用相同的编码方式。
最后,我们将请求的编码方式设置为浏览器的默认编码方式,以便在输出 HTML 时使用相同的编码方式。
解析数据
接下来,我们用 xpath 解析数据。我们用开发者工具定位到标签位置。
接下来,我们使用 html_data.xpath
方法来解析 HTML 文档中的 ul
和 li
元素,并将它们存储在 lis
变量中。
最后,我们使用 for
循环遍历 lis
,并使用 li.xpath
方法来获取每个 li
元素的 a
元素的 href
和 alt
属性,并将它们存储在 href
和 title
变量中。我们运行结果之后,我们还要对链接进行拼接。
保存数据
接下来就是保存数据,先写入头文件。
这段代码中,我们首先使用 Python 的 open()
函数打开了一个名为 "4399 小游戏.csv" 的文件,文件模式为 a
,表示追加模式。
然后,我们使用 Python 的 csv
模块创建了一个名为 csv_writer
的 DictWriter
对象,并使用 writeheader()
方法来写入表头。
最后,我们使用 write()
方法向文件中写入数据,数据内容为一个字典对象。
这段代码的作用是将一个字典对象写入到文件中,其中包含了游戏名称和游戏网站两个字段的数据。
需要注意的是,在写入数据之前,我们需要使用 csv.DictWriter()
函数来创建一个 DictWriter
对象,并使用 fieldnames
参数来指定字段名称。此外,我们还需要使用 newline=''
参数来避免在 Windows 系统中出现换行符问题。'''
版权声明: 本文为 InfoQ 作者【BROKEN】的原创文章。
原文链接:【http://xie.infoq.cn/article/1e061650487faffcb4904f44c】。文章转载请联系作者。
评论