python:requests+beautifulSoup
核心比喻:一次完美的“情报获取”任务
-
requests
库:是你的 “外勤特工”。他的任务是前往指定地点(URL),取回一个“加密包裹”(网页响应),然后安全地带回来。他不关心包裹里是什么,只负责获取。 -
BeautifulSoup
库:是你的 “密码破译专家”。他的工作是待在总部,等“外勤特工”带回包裹后,他负责打开并解析这个包裹(HTML/XML内容),从中找出你需要的具体情报。
它们永远是协同工作的:requests
负责“拿”,BeautifulSoup
负责“拆”。
requests
库总结:网络世界的信使
1. 核心职责
用Python代码发送HTTP请求(访问网页、调用API等),并获取服务器的响应。
2. 安装
pip install requests
3. 核心用法与代码示例
- 发送GET请求(最常用)
```pythonimport requestsurl = 'https://www.example.com'response = requests.get(url) ```
- 检查响应状态 (
response
对象)
在你拿到response
后,第一件事就是检查任务是否成功。
```pythonif response.status_code == 200:print("请求成功!")else:print(f"请求失败,状态码: {response.status_code}")```* `200`: OK (成功)* `404`: Not Found (未找到)* `403`: Forbidden (被禁止)
- 获取响应内容
```python# 获取HTML或文本内容 (字符串)html_content = response.text# 获取JSON内容 (自动转为Python字典/列表,用于API)json_data = response.json()# 获取二进制内容 (用于下载图片、文件等)image_content = response.content```
- 定制请求(反爬虫与高级用法)
```pythonheaders = {'User-Agent': 'Mozilla/5.0 ...' # 伪装成浏览器}params = {'q': 'python', # URL参数,会变成 ...?q=python'page': 2}# 发送带有伪装和参数的请求response = requests.get(url, headers=headers, params=params)```
- 错误处理
```pythontry:response = requests.get(url, timeout=5) # 设置超时response.raise_for_status() # 如果状态码不是2xx,会抛出异常except requests.exceptions.RequestException as e:print(f"网络请求出错: {e}")```
BeautifulSoup
库总结:HTML的解剖刀
1. 核心职责
解析HTML或XML文档,将一长串无序的字符串,转换成一个结构化的、可以轻松遍历和搜索的Python对象。
2. 安装
pip install beautifulsoup4
BeautifulSoup 只是一个解析器,它还需要一个“引擎”来工作。Python内置的 html.parser
就很好用。
3. 核心用法与代码示例
- 创建“汤”(Soup)对象
这是所有操作的第一步,requests
获取到的response.text
就是原材料。
```pythonfrom bs4 import BeautifulSouphtml_content = response.text # 假设这来自requestssoup = BeautifulSoup(html_content, 'html.parser')```
- 查找元素(最核心功能)
* 查找第一个匹配的元素 (find
)# 查找第一个<h1>标签 first_heading = soup.find('h1')# 查找ID为 "main-content" 的div标签 main_div = soup.find('div', id='main-content')# 查找class为 "article-title" 的p标签 # 注意:因为 'class' 是Python关键字,所以用 'class_' article_title = soup.find('p', class_='article-title')
* **查找所有匹配的元素 (`find_all`)**这会返回一个列表,包含了所有找到的元素。```python# 查找所有的<a>标签 (链接)all_links = soup.find_all('a')# 遍历所有找到的链接for link in all_links:print(link)```
- 从找到的元素中提取信息
当你用find
或find_all
找到一个元素(我们称之为Tag
对象)后,就可以从中提取你需要的东西。
```python# 假设我们已经找到了 article_title 这个元素# <p class="article-title">这是一个标题</p># 1. 获取标签内的文本title_text = article_title.text # 输出: '这是一个标题'# 或者用 .get_text(strip=True) 去除多余空格# 2. 获取标签的属性 (比如链接的URL)# 假设我们找到了一个 a_tag# <a href="/news/123.html" id="link1">新闻链接</a>link_url = a_tag['href'] # 输出: '/news/123.html'link_id = a_tag['id'] # 输出: 'link1'```
总结对比:一张表看懂
特性 | requests | BeautifulSoup |
---|---|---|
核心职责 | 获取数据 (发送网络请求) | 解析数据 (解析HTML字符串) |
交互对象 | 远端Web服务器 | 本地的HTML文本 |
主要输入 | URL地址 | response.text (HTML字符串) |
主要输出 | Response 对象 | Soup 对象,内含 Tag 对象 |
关键函数 | requests.get() / post() | soup.find() / find_all() |
比喻 | 外勤特工 / 信使 | 密码破译专家 / 解剖刀 |
最终,你的标准工作流永远是:
response = requests.get(url)
-> soup = BeautifulSoup(response.text, '...')
-> data = soup.find(...)