【实战演练】数据爬取与清洗:使用Python进行网页数据爬取与清洗
发布时间: 2024-06-24 21:08:22 阅读量: 96 订阅数: 116
![【实战演练】数据爬取与清洗:使用Python进行网页数据爬取与清洗](https://pic3.zhimg.com/80/v2-d9078cac12f9a75b85bc3aceac346472_1440w.webp)
# 2.1.1 HTML和XML简介
HTML(超文本标记语言)和XML(可扩展标记语言)是两种广泛用于创建和标记网络文档的标记语言。
- **HTML**:主要用于定义网页的结构和内容,包括标题、段落、列表、链接等元素。
- **XML**:是一种更通用的标记语言,可用于表示各种数据结构,包括文档、数据交换和配置信息。
HTML和XML都使用标签来标记文档中的元素,但XML比HTML更灵活,因为它允许用户创建自己的标签。
# 2. Python数据爬取技术
### 2.1 网页解析与DOM树
#### 2.1.1 HTML和XML简介
**HTML(超文本标记语言)**是一种用于创建网页的标记语言。它由一系列标签组成,这些标签定义了网页的结构和内容。
**XML(可扩展标记语言)**是一种类似于HTML的标记语言,但它更通用,可以用于表示各种数据。
#### 2.1.2 DOM树的概念和结构
**DOM(文档对象模型)**是HTML或XML文档的树状表示。它将文档组织成一个节点层次结构,其中每个节点代表文档中的一个元素。
DOM树的结构如下:
* **根节点:**文档的根元素,通常是`<html>`标签。
* **父节点:**包含其他节点的节点。
* **子节点:**被父节点包含的节点。
* **兄弟节点:**具有相同父节点的节点。
### 2.2 HTTP请求与响应
#### 2.2.1 HTTP协议基础
**HTTP(超文本传输协议)**是一种用于在Web上发送和接收数据的协议。它基于请求-响应模型,其中客户端(例如浏览器)向服务器发送请求,服务器响应包含请求数据的响应。
HTTP请求由以下部分组成:
* **请求行:**指定请求类型(例如GET、POST)、请求的资源(例如URL)和HTTP版本。
* **请求头:**提供有关请求的其他信息,例如用户代理、内容类型和语言偏好。
* **请求体:**包含发送到服务器的可选数据。
HTTP响应由以下部分组成:
* **状态行:**指定响应状态代码(例如200 OK)、HTTP版本和响应消息。
* **响应头:**提供有关响应的其他信息,例如内容类型、长度和缓存控制。
* **响应体:**包含请求的数据。
#### 2.2.2 使用Python发送HTTP请求
Python中的`requests`库可以轻松地发送HTTP请求。以下代码演示如何使用`requests`库发送GET请求:
```python
import requests
# 发送GET请求
response = requests.get("https://example.com")
# 检查响应状态码
if response.status_code == 200:
# 响应成功,处理响应体
print(response.text)
else:
# 响应失败,处理错误
print("请求失败,状态码:", response.status_code)
```
### 2.3 网页数据提取与解析
#### 2.3.1 正则表达式基础
**正则表达式(regex)**是一种用于匹配字符串模式的强大工具。它们可以用于从网页中提取特定数据。
正则表达式由以下部分组成:
* **模式:**要匹配的字符串模式。
* **修饰符:**用于控制模式行为的可选标志。
以下是一个正则表达式,用于匹配电子邮件地址:
```
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
```
#### 2.3.2 BeautifulSoup库的使用
**BeautifulSoup**是一个Python库,用于解析HTML和XML文档。它提供了方便的方法来导航DOM树和提取数据。
以下代码演示如何使用BeautifulSoup解析HTML文档:
```python
from bs4 import BeautifulSoup
# 解析HTML文档
soup = BeautifulSoup(html_doc, "html.parser")
# 查找所有<a>标签
links = soup.find_all("a")
# 提取每个链接的文本和URL
for link in links:
print(link.text, link.get("href"))
```
# 3. Python数据清洗技术
### 3.1 数据类型转换与标准化
#### 3.1.1 常见数据类型及其转换
在数据清洗过程中,经常需要将数据从一种类型转换为另一种类型,以满足后续处理或分析的需求。Python提供了丰富的类型转换函数,可以轻松实现数据类型转换。
| 数据类型 | 转换函数 |
|---|---|
| 整数 | `int()` |
| 浮点数 | `float()` |
| 字符串 | `str()` |
| 布尔值 | `bool()` |
| 日期时间 | `datetime.datetime()` |
**代码块:**
```python
# 将字符串转换为整数
num_str = "123"
num_int = int(num_str)
# 将浮点数转换为字符串
num_float = 3.14
num_str = str(num_float)
# 将布尔值转换为字符串
flag = True
flag_str = str(flag)
```
**逻辑分析:**
上述代码展示了如何将字符串转换为整数、浮点数转换为字符串以及布尔值转换为字符串。`int()`、`float()`和`str()`函数分别用于执行这些转换。
#### 3.1.2 数据标准化方法
数据标准化是指将数据转换为一致的格式和单位,以消除数据之间的差异并提高数据质量。常用的数据标准化方法包括:
- **数值标准化:**将数值数据转换为具有相同单位和范围,例如将货币金额转换为美元或将日期转换为时间戳。
- **类别标准化:**将类别数据转换为一致的格式,例如将性别转换为"男"、"女"或"其他"。
- **日
0
0