type
status
date
slug
summary
tags
icon
password
category
这篇文章详细介绍了如何使用Python进行数据爬取,具体以爬取郑州地铁线路信息为例。文章从基础入门到进阶使用的整个过程,包括目标分析、项目准备、XPath结构分析与爬取逻辑,以及代码实现及运行结果。此外,还给出了项目的延伸思考,即如何进行多层级爬取。
一、目标分析
目标网站:8684郑州地铁线路图 (https://m.8684.cn/zhengzhou_dt_map)
- 爬取内容:
- 所有地铁线路的名称
- 每条线路的站点信息
- 数据存储:将爬取到的数据存储到 CSV 文件中,方便后续查看和分析。
二、项目准备
必要的 Python 库:
requests
: 用于发送 HTTP 请求,获取网页内容。
lxml
: 用于解析 HTML 文档,提取所需信息。
csv
: 用于处理 CSV 文件,将数据写入文件。
2.1 第三方库介绍:
2.1.1 requests
库:
作用:
requests
是一个简洁且易于使用的 HTTP 库,用于发送 HTTP 请求,例如 GET 和 POST 请求,并处理服务器的响应。优点:
- 简洁易用:
requests
的 API 设计简洁明了,易于理解和使用。
- 功能强大:
requests
支持各种 HTTP 方法,包括 GET、POST、PUT、DELETE 等,以及各种身份验证、代理、Cookie 处理等功能。
- 速度快:
requests
底层使用 urllib3,具有高效的 HTTP 连接池和连接复用机制,能够快速处理大量请求。
选择理由: 在爬虫项目中,
requests
是获取网页内容的首选库,因为它能够高效、可靠地处理 HTTP 请求和响应。2.1.2 lxml
库:
作用:
lxml
是一个高效的 XML 和 HTML 处理库,支持 XPath 和 CSS 选择器,用于解析 HTML 文档,定位和提取所需信息。优点:
- 高效快速:
lxml
基于 C 库 libxml2 和 libxslt,解析速度非常快,尤其是在处理大型 HTML 文档时。
- 功能强大:
lxml
支持 XPath 1.0、XSLT 1.0、DTD 验证、 RelaxNG 验证等功能,能够处理复杂的 HTML 结构。
- 易于使用:
lxml
提供了简洁的 API,方便使用 XPath 和 CSS 选择器定位和提取 HTML 元素。
选择理由:
lxml
是解析 HTML 文档的理想选择,因为它能够快速、准确地定位和提取所需信息,并且支持 XPath,方便处理复杂的 HTML 结构。2.1.3 csv
库:
作用:
csv
是 Python 内置的 CSV 文件处理库,用于读取和写入 CSV 文件。优点:
- 简单易用:
csv
库提供了简洁的 API,方便读取和写入 CSV 文件。
- 支持多种格式:
csv
库支持多种 CSV 格式,包括标准 CSV、Excel CSV 等。
选择理由:
csv
库是处理 CSV 文件的标准库,能够方便地将爬取到的数据存储到 CSV 文件中,方便后续查看和分析。三、XPath 结构分析与爬取逻辑
3.1 XPath 结构分析:
首先,我们需要分析目标网站的 HTML 结构,找到包含线路和站点信息的元素,并确定其 XPath 表达式。
通过观察郑州地铁官网的 HTML 源代码,我们可以发现:
- 所有地铁线路信息包含在
<div class="line-box">
元素中。
- 每条线路对应一个
<li class="sLink">
元素。
- 线路名称包含在
<li>
元素下的<a>
元素的文本内容中。
- 线路下的站点信息包含在
<div class="cm-tr">
元素下的多个<a>
元素的文本内容中。
3.2 爬取逻辑:
发送 HTTP 请求: 使用
requests
库向目标网站发送 GET 请求,获取网页的 HTML 内容。解析 HTML 结构: 使用
lxml
库将 HTML 内容解析为 HTML 文档,方便使用 XPath 定位元素。提取线路信息:
- 使用 XPath
//li[@class="sLink"]
定位所有线路的<li>
元素。
- 对于每个
<li>
元素: - 使用 XPath
./a/text()
提取线路名称。 - 使用 XPath
./div[@class="cm-tr"]/a/text()
提取该线路下所有站点的名称列表。
数据整合:
- 将站点名称列表转换为字符串,使用 "," 连接各个站点。
写入 CSV 文件:
- 创建名为
ZhengZhouSubwayInfo.csv
的 CSV 文件。
- 写入列名 "线路" 和 "站点"。
- 将线路名称和站点信息逐行写入文件。
四、代码实现及运行结果
运行结果:
csv文件:
添加打印提示信息,方便用户了解程序运行状态。
五、项目延伸(多层级爬取)
假设郑州地铁官网的每个线路页面都有更详细的信息,例如首末班车时间、票价等。我们可以利用多层级爬取获取这些数据:
- 获取线路链接: 在提取线路名称的同时,获取每个线路页面的链接,通常包含在
<a>
元素的href
属性中。
- 循环访问线路页面: 遍历线路链接,发送 HTTP 请求获取每个线路页面的内容。
- 解析线路页面: 使用 XPath 定位并提取所需信息,例如首末班车时间、票价等。
- 数据整合与存储: 将所有信息整合到一个数据结构中,例如字典或列表,并存储到 CSV 文件或数据库中。
多层级爬取代码示例:
注意:
- 以上代码示例仅供参考,实际代码需要根据目标网站的结构进行调整。
- 多层级爬取需要控制爬取频率,避免对目标网站造成过大压力。
如果觉得对你有帮助的话,可以请BUZZ喝杯咖啡哦👇
如果对于本篇博客有任何问题,或者有任何想法和建议,都可以在评论区与我交流,我会尽快回复您。(评论内容会通过您的邮箱推送给您)
- 作者:BUZZ
- 链接:https://blog.buzzchat.top//article/spider01
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。