lxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如,
,
,
,,
,
,,
等。lxml 还支持使用正则表达式来解析和呈现 XML 和 HTML。
本文我们就介绍lxml的使用方法,我们使用lxml获取我们想要的数据。
首先,我们要进行数据来源分析,知道我们的需求是什么?
我们都玩过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)
"""
以上就是Python实战使用XPath采集数据示例解析的详细内容,更多关于Python XPath采集数据的资料请关注脚本之家其它相关文章!
上一篇:周杰伦海口演唱会一场3.8万人 为啥大家手机信号还挺好?
下一篇:最后一页
X 关闭
X 关闭
中新网上海3月30日电 (记者 陈静)上海正面临常态化防控以来疫情形势最严峻复杂的挑战,单日新增阳性感染者数量不断刷新纪录。记者30
中新网3月30日电 据国家地震台网官方微博消息,中国地震台网正式测定:3月30日18时14分在新疆和田地区皮山县(北纬36 01度,东经77 89
上海市委常委会今天上午(3月30日)举行会议,听取当前疫情应急处置和核酸筛查相关工作汇报,研究部署下一步疫情防控重点工作。市委书记
(抗击新冠肺炎)江苏无锡一男子隐匿行程轨迹被警方立案侦查 中新网无锡3月30日电 (记者 孙权)3月30日,无锡市在“应检尽检”人员核
(抗击新冠肺炎)官方称吉林市疫情扩散势头得到遏制 中新网吉林3月30日电 (记者 石洪宇)记者30日从吉林市政府新闻办召开的疫情防控
中新网唐山3月30日电 (白云水 孟潮)3月30日,河北省唐山市召开新冠肺炎疫情防控工作新闻发布会通报称,3月29日0时至24时,唐山市新增
浙江省嘉兴市秀洲区新型冠状病毒感染肺炎疫情防控指挥部办公室发布通告: 3月30日上午,秀洲区发现1例新冠肺炎阳性感染者,该感染者
今天(3月30日)下午,新疆乌鲁木齐市人民政府新闻办公室召开疫情防控新闻发布会,通报乌鲁木齐市新冠肺炎疫情和疫情防控最新情况。会上
中新网天津3月30日电 (记者 王君妍)记者30日从天津市水务局获悉,为充分发挥河湖长制优势,近日,天津市将南水北调中线天津干线(天津
(抗击新冠肺炎)河北廊坊累计治愈出院673例 5县区恢复域内交通 中新网廊坊3月30日电 (宋敏涛 郭京泉)30日,河北省廊坊市召