这篇“Python怎么使用XPath采集数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么使用XPath采集数据”文章吧。
lxml
lxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如
<a>,
<img>,
<form>,
<ul>,
<li>,
<ol>,
<dl>,
<dt>,
<dd>等。lxml 还支持使用正则表达式来解析和呈现 XML 和 HTML。
发送请求
首先,我们要进行数据来源分析,知道我们的需求是什么?
明确需求:
明确采集网站是什么?
明确采集数据是什么?
我们都玩过4399小游戏,我们想获取游戏名称和游戏链接,并保存下来。首先,我们导入相关的库文件。
import csv import requests from lxml import etree
接下来,我们可以发送请求,获取网页源代码,代码如下。
url = 'https://www.4399.com/flash_fl/2_1.htm' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } res = requests.get(url, headers=headers) res.encoding = res.apparent_encoding
这段代码是一个 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 = etree.HTML(res.text) lis = html_data.xpath('//*[@class="bre m15"]//ul/li') for li in lis: href = li.xpath('./a/@href')[0] title = li.xpath('./a/img/@alt')[0]
接下来,我们使用
html_data.xpath方法来解析 HTML 文档中的
ul和
li元素,并将它们存储在
lis变量中。
最后,我们使用
for循环遍历
lis,并使用
li.xpath方法来获取每个
li元素的
a元素的
href和
alt属性,并将它们存储在
href和
title变量中。 我们运行结果之后,我们还要对链接进行拼接。
保存数据
接下来就是保存数据,先写入头文件。
f = open('4399小游戏.csv', mode='a', encoding='utf-8', newline='') csv_writer = csv.DictWriter(f, fieldnames=['游戏名称', '游戏网站']) csv_writer.writeheader()
这段代码中,我们首先使用 Python 的
open()函数打开了一个名为 "4399小游戏.csv" 的文件,文件模式为
a,表示追加模式。
然后,我们使用 Python 的
csv模块创建了一个名为
csv_writer的
DictWriter对象,并使用
writeheader()方法来写入表头。
最后,我们使用
write()方法向文件中写入数据,数据内容为一个字典对象。
这段代码的作用是将一个字典对象写入到文件中,其中包含了游戏名称和游戏网站两个字段的数据。
需要注意的是,在写入数据之前,我们需要使用
csv.DictWriter()函数来创建一个
DictWriter对象,并使用
fieldnames参数来指定字段名称。此外,我们还需要使用
newline=''参数来避免在 Windows 系统中出现换行符问题。 '''
dit = { '游戏名称': title, '游戏网站': data_url, } csv_writer.writerow(dit)