> 文章列表 > 〖Python网络爬虫实战⑬〗- XPATH实战案例

〖Python网络爬虫实战⑬〗- XPATH实战案例

〖Python网络爬虫实战⑬〗- XPATH实战案例

  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+

                python项目实战

                Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)
  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战⑫〗- XPATH语法介绍

🌟上节回顾

前面我们简单介绍了XPath的语法,由于篇幅有限,也不可能全部介绍完。本文我们将介绍xpath的相关实战案例,通过具体的案例来学习XPath语法。

⭐️XPATH实战案例

在这里,大家可以看看我之前写的一个博客,就是用XPath的实战案例。

【Python实战】Python采集二手车数据——超详细讲解

🌟环境使用

  • python 3.9
  • pycharm

🌟模块使用

  • requests

🌟模块介绍

  • requests

        requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • re

        re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • csv

        它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

🌟模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:
  • 失败一: pip 不是内部命令

                解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)

                解决方法: 因为是网络链接超时, 需要切换镜像源

   

    清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:https://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:https://pypi.hustunique.com/山东理工大学:https://pypi.sdutlinux.org/豆瓣:https://pypi.douban.com/simple/例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名
  • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

                解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。

🌟案例实战

        我们通过学习了简单的Xpath操作,以及在另外一篇xpath的实战案例下,本文,继续分享一个关于xpath的实战案例。

✨lxml

        lxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如 <a><img><form><ul><li><ol><dl><dt><dd> 等。lxml 还支持使用正则表达式来解析和呈现 XML 和 HTML。

✨发送请求

首先,我们要进行数据来源分析,知道我们的需求是什么?

明确需求:

  • 明确采集网站是什么?
  • 明确采集数据是什么?

我们都玩过4399小游戏,我们想获取游戏名称和游戏链接,并保存下来。首先,我们导入相关的库文件。​

import csvimport requestsfrom 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)

🌟总结

xpath最大的难点就是如何写下path后面的语法,我们要找到对应的节点,就可以了。