核心比喻:一次完美的“情报获取”任务

  • requests:是你的 “外勤特工”。他的任务是前往指定地点(URL),取回一个“加密包裹”(网页响应),然后安全地带回来。他不关心包裹里是什么,只负责获取

  • BeautifulSoup:是你的 “密码破译专家”。他的工作是待在总部,等“外勤特工”带回包裹后,他负责打开解析这个包裹(HTML/XML内容),从中找出你需要的具体情报。

它们永远是协同工作的:requests 负责“拿”,BeautifulSoup 负责“拆”。


requests 库总结:网络世界的信使

1. 核心职责
用Python代码发送HTTP请求(访问网页、调用API等),并获取服务器的响应。

2. 安装

pip install requests

3. 核心用法与代码示例

  • 发送GET请求(最常用)
 ```python
 import requests
 url = 'https://www.example.com'
 response = requests.get(url) 
 ```
  • 检查响应状态 (response 对象)
    在你拿到 response 后,第一件事就是检查任务是否成功。
 ```python
 if 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
 ```
  • 定制请求(反爬虫与高级用法)
 ```python
 headers = {
     'User-Agent': 'Mozilla/5.0 ...' # 伪装成浏览器
 }
 params = {
     'q': 'python', # URL参数,会变成 ...?q=python
     'page': 2
 }
 # 发送带有伪装和参数的请求
 response = requests.get(url, headers=headers, params=params)
 ```
  • 错误处理
 ```python
 try:
     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 就是原材料。
 ```python
 from bs4 import BeautifulSoup
 
 html_content = response.text # 假设这来自requests
 soup = 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)
   ```
  • 从找到的元素中提取信息
    当你用 findfind_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(...)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐