Python实战使用XPath采集数据示例解析
作者:极客飞虎 发布时间:2022-02-25 09:00:24
lxml
lxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如 <a>
,<img>
,<form>
,<ul>
,<li>
,<ol>
,<dl>
,<dt>
,<dd>
等。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)
'''
来源:https://juejin.cn/post/7220782242254798907
猜你喜欢
- Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 代码如下:declare @p
- 判断函数如下:Public Function CheckBIG(strSource As String) As BooleanDim idx
- 本文实例讲述了Python多重继承的方法解析执行顺序。分享给大家供大家参考,具体如下:任何实现多重继承的语言都要处理潜在的命名冲突, 这种冲
- 这个是很有用的一个运算,除了本身可以求自然对数,还是求指数函数需要用到的基础函数。实现原理就是泰勒展开,最简单是在x=1处进行泰勒展开:但该
- JavaScript中的定时器大家基本在平时的开发中都遇见过吧,但是又有多少人去深入的理解其中的原理呢?下面我们就来分析一下定时器的实现原理
- 概述我在教学和实际设计中的一些心得。就不长篇大论了!让大家省些时间,捞干的。尽量通俗易懂。想知道怎样设计标志,就要知道什么是标志?标志:外来
- 这种情况在Access下可以通过,但SQL则不行,在百度搜索解决方法,发现N多人出现同样问题却找不到解决办法: 代码如下:set
- 前言21世纪是信息的世纪,综合国力的竞争在很大程度上是信息的竞争,更是信息利用率的竞争。近年来,随着“数字地球”和“数字国土”战略的提出和实
- 声明定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。平台:win/I
- Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很
- 平时我们获取事件对象一般写法如下:function getEvent(event) { return event
- 最近在看python脚本语言,脚本语言是一种解释性的语言,不需要编译,可以直接用,由解释器来负责解释。python语言很强大,而且写起来很简
- 本文实例讲述了PHP截取指定图片大小的方法。分享给大家供大家参考。具体分析如下:imagecopyresampled($newim, $im
- 认识pip众所周知,pip可以对python的第三方库进行安装、更新、卸载等操作,十分方便。pip的全称:package installer
- js中用import导入模块和用require导入模块的区别JavaScript中,模块是一种可重用的代码块,它将一些代码打包成一个单独的单
- 引言这三个排序方法应对日常工作基本够用先说一下三者的区别sort, sorted 是用在 list 数据类型中的排序方法argsort 是用
- 随着十几年前“用户体验”这一概念的提出,“用户研究”也逐渐发展成为一个新兴的行业。那么,“用户研究”究竟包括哪些工作内容,在企业中如何开展,
- 一、前言越来越多的网站和App开始为用户搭建签到系统,以此来吸引和留住用户。签到系统是一种轻量、互动性强的营销方式,通过用户签到获取免费权益
- 什么是自省?在日常生活中,自省(introspection)是一种自我检查行为。在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么
- 有一个表,用户需要在后台操作它,希望能对它动态进行添加删除字段。这个功能也许没有问题,但是它原有插入与更新的两个存储过程,也需要一起修改。因