别再用 urllib 了,requests 才是互联网要饭的神器

很多人一听 requests 模块,脑瓜子嗡嗡的。什么 getpostheadersjson,感觉跟看天书似的。

其实特简单。requests 就是你在互联网上"要饭"的艺术。 你把"要饭"这门手艺搞明白了,这辈子都忘不掉。


一、requests 是啥?就是网上要饭

想象一个场景。

你是娃哈哈,饥肠辘辘,兜里没钱。

马路对面有一家服务器大排档 ,招牌上写着:www.laowangchaofen.com

你走过去,扯着嗓子喊:

python 复制代码
import requests

response = requests.get('https://www.laowangchaofen.com/menu')
print(response.text)

老板在厨房里听见了,探出头回你:

html 复制代码
<html>
  <body>
    <h1>老王炒粉菜单</h1>
    <ul>
      <li>蛋炒粉 - 15元</li>
      <li>肉炒粉 - 20元</li>
      <li>惠灵顿牛排 - 不存在,滚</li>
    </ul>
  </body>
</html>

这一来一回,就是一次完整的 requests 请求。

  • requests.get() 就是你喊的那句话:"老板,菜单给我看看!"
  • response 就是老板端上来的那盘菜
  • response.text 就是菜的内容(HTML 字符串)
  • response.status_code 就是老板的脸色(200=笑嘻嘻,404=没有这道菜)

记住:requests 的本质就是"伸手要"。 你要菜单、要图片、要数据,都要靠它喊一嗓子。


二、GET:站在门口喊

你去大排档,最常见的姿势就是站在门口喊。

python 复制代码
import requests

# 站在门口喊:"老板,你家有没有炒粉?"
response = requests.get('https://www.laowangchaofen.com/menu')

print(f"老板脸色:{response.status_code}")
print(f"菜单内容:{response.text[:100]}")  # 只看前100字,太多了

GET 的特点:

  • 你的要求全写在 URL 里,就像站在门口喊,路过的人都能听见
  • 只能"要",不能"给"(不能带食材过去让老板加工)

带参数喊:

python 复制代码
import requests

# 站在门口喊:"老板,来盘蛋炒粉,不要葱,加辣!"
params = {
    'dish': '蛋炒粉',
    'no_onion': 'true',
    'spicy': 'extra'
}

response = requests.get(
    'https://www.laowangchaofen.com/order',
    params=params
)

print(response.url)
# 结果:https://www.laowangchaofen.com/order?dish=蛋炒粉&no_onion=true&spicy=extra

看到没?你的要求全暴露在 URL 里了,跟站在门口裸奔一样。


三、POST:走进厨房递食材

有时候,你不仅要点菜,还要自带食材让老板加工。

python 复制代码
import requests

# 走进厨房,递上自带的和牛
data = {
    'dish': '惠灵顿牛排',
    'material': '和牛',
    'cook_level': 'medium_rare'
}

response = requests.post(
    'https://www.laowangchaofen.com/kitchen',
    data=data
)

print(f"老板脸色:{response.status_code}")
print(f"回话:{response.text}")

POST 的特点:

  • 你带的东西放在 data 里,不在 URL 里显示,相对隐私
  • 适合提交表单、登录账号、发表评论

递 JSON 格式的食材:

python 复制代码
import requests

# 有些老板只收 JSON 格式的订单
json_data = {
    'dish': '惠灵顿牛排',
    'material': '和牛',
    'cook_level': 'medium_rare'
}

response = requests.post(
    'https://www.laowangchaofen.com/kitchen',
    json=json_data  # 注意这里用 json=,不是 data=
)

print(response.json())  # 老板回的也是 JSON,直接解析

一句话记住:

GET 是站在门口喊,POST 是走进厨房递食材。


四、Headers:你的名片和口味偏好

你去大排档,有时候需要亮身份,或者告诉老板你的特殊要求。

python 复制代码
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',  # 假装是浏览器
    'Accept': 'text/html',  # 我只要 HTML,不要 JSON
    'Authorization': 'Bearer 我的会员卡号123456',  # 我是 VIP
    'Referer': 'https://www.google.com'  # 我从谷歌来的,别把我当爬虫
}

response = requests.get(
    'https://www.laowangchaofen.com/vip-menu',
    headers=headers
)

print(response.text)

Headers 就是你在 HTTP 世界里的名片:

  • User-Agent:你是谁(浏览器?爬虫?APP?)
  • Accept:你要什么格式的菜(HTML?JSON?图片?)
  • Authorization:你的会员卡(登录凭证)
  • Referer:你从哪来(有些老板看这个决定卖不卖给你)

很多网站防爬虫,就是看你 Headers 里的 User-Agent。 你直接 requests.get() 去要,它一看你是"python-requests/2.28.1",直接 403 黑脸:"不卖给你,滚。"

解决办法:换个 Headers,假装是浏览器。


五、Response:老板端上来的菜

老板回你了,你得会看。

python 复制代码
import requests

response = requests.get('https://www.laowangchaofen.com/menu')

# 老板的脸色
print(response.status_code)  # 200(笑嘻嘻)

# 菜的原始内容(HTML 字符串)
print(response.text[:200])

# 菜的二进制内容(图片、视频、PDF 用这个)
# print(response.content)

# 老板回的 JSON(如果菜单是 API 接口)
# print(response.json())

# 老板给的 Headers(配料单)
print(response.headers)

# 你点的 URL(确认一下有没有被重定向)
print(response.url)

# 编码方式(防止中文乱码)
print(response.encoding)

重点记住三个:

  • response.status_code:老板脸色(200 成功,404 没有,500 炸了)
  • response.text:字符串内容(HTML、普通文本)
  • response.json():JSON 数据(现代 API 最常用的格式)

六、Cookie:你的会员卡

HTTP 是无状态的,老板记性极差。你刚点了炒粉,五分钟后要加可乐,老板问你:"你是谁?"

Cookie 就是你的会员卡。

python 复制代码
import requests

# 第一次来,老板给你发会员卡
session = requests.Session()

# 登录(老板给你发卡)
login_data = {
    'username': '毛小白',
    'password': '123456'
}

session.post(
    'https://www.laowangchaofen.com/login',
    data=login_data
)

# 现在会员卡自动带上了,直接点 VIP 菜
response = session.get('https://www.laowangchaofen.com/vip-menu')
print(response.text)

# 再点一杯可乐,会员卡还在
response = session.get('https://www.laowangchaofen.com/order/cola')
print(response.text)

requests.Session() 的妙用:

  • 自动保存和发送 Cookie,不用你手动管理
  • 连接复用,比每次 requests.get() 更快
  • 适合登录后的连续操作(爬虫、自动化脚本)

一句话:

requests.get() 是散客,每次都要重新自我介绍;Session() 是熟客,会员卡自动亮。


七、超时和异常:老板不理你怎么办

有时候老板厨房炸了,或者网络断了,你的请求会卡住。

python 复制代码
import requests
from requests.exceptions import RequestException, Timeout, ConnectionError

try:
    # 等 3 秒,老板不回话就撤
    response = requests.get(
        'https://www.laowangchaofen.com/menu',
        timeout=3
    )
    print(response.text)

except Timeout:
    print("老板太忙了,3秒没回话,换一家!")

except ConnectionError:
    print("大排档关门了,网线被拔了!")

except RequestException as e:
    print(f"出事了:{e}")

timeout 参数:

  • timeout=3:等 3 秒,超时就抛异常
  • timeout=(3, 27):连接等 3 秒,读取等 27 秒

异常处理:

  • Timeout:老板不理你
  • ConnectionError:大排档根本不存在(域名错了、断网了)
  • HTTPError:老板回话了,但脸色不好(4xx、5xx)
  • RequestException:所有异常的爹,兜底用

八、代理:让别人帮你喊

有些大排档不接待你,或者你不想让老板知道你是谁。

python 复制代码
import requests

proxies = {
    'http': 'http://127.0.0.1:7890',
    'https': 'http://127.0.0.1:7890'
}

response = requests.get(
    'https://www.laowangchaofen.com/menu',
    proxies=proxies
)

print(response.text)

代理就是找个中间人帮你喊:

  • 你 → 代理服务器 → 大排档
  • 大排档看到的是代理的 IP,不是你的

爬虫必备技能。 很多网站限制访问频率,用代理池轮换 IP,才能持续要饭。


九、终极总结(背下来)

python 复制代码
import requests

# 基础要饭
response = requests.get('https://api.example.com/data')

# 带参数要饭
response = requests.get(url, params={'key': 'value'})

# 递食材
response = requests.post(url, data={'key': 'value'})
response = requests.post(url, json={'key': 'value'})

# 亮名片
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})

# 熟客模式
session = requests.Session()
session.post(url, data=login_data)  # 登录
session.get(url)  # 自动带 Cookie

# 看老板脸色
if response.status_code == 200:
    data = response.json()  # 或 response.text
else:
    print(f"老板炸了:{response.status_code}")

# 不等了
response = requests.get(url, timeout=5)

口诀:

requests 像要饭,get 喊 post 递。
headers 亮名片,session 是熟客。
status_code 看脸色,text 是字符串,json 是字典。
timeout 防卡死,代理帮你喊,异常要兜底。


写在最后

下次再有人问你"Python 怎么发 HTTP 请求",你就说:

"import requests,然后伸手要。"

他要是问你"GET 和 POST 区别",你就说:

"GET 是站在门口喊,POST 是走进厨房递食材。递啥?递 JSON。"

散会。

相关推荐
GIS数据转换器4 小时前
延凡分布式光伏集中监控平台
人工智能·分布式·数据挖掘·数据分析·无人机·智慧城市
乐迪信息5 小时前
乐迪信息:精准识别每一艘船:船舶AI类型分类算法技术解析
大数据·人工智能·物联网·安全·目标跟踪·分类·数据挖掘
YangYang9YangYan15 小时前
2026年工作后学习数据分析的价值与路径
学习·数据挖掘·数据分析
Yu_Lijing1 天前
Python数据分析和数据处理库Pandas(透视表)
人工智能·数据挖掘·数据分析·pandas
yong99901 天前
基于灰狼算法优化支持向量回归(GWO-SVR)的混合算法
算法·数据挖掘·回归
源码之家1 天前
Python股票数据分析与预测系统 大数据项目
大数据·python·机器学习·数据挖掘·数据分析·股票·可视化
AI科技星1 天前
宇宙终极几何:莫比乌斯光速螺旋统一理论-精细结构常数α本源结构
算法·机器学习·数学建模·数据挖掘·量子计算
没有羊的王K1 天前
数据分析EDA和特征工程
数据挖掘·数据分析
babe小鑫1 天前
2026年人力资源数据分析的技术价值与应用前景
数据挖掘·数据分析