写爬虫的第一步,是把网页内容拿到手。requests 是 Python 里最常用的 HTTP 库,几行代码就能完成一次请求。这一篇只讲最基础的 GET 请求、状态码判断、超时和参数传递,掌握这些就能抓取大部分静态页面了。

安装与第一次请求

requests 是第三方库,先安装:

pip install requests

然后发起第一个 GET 请求:

import requests

resp = requests.get("https://example.com", timeout=10)
print(resp.status_code)   # 输出:200
print(resp.text[:40])     # 输出:<!doctype html>(网页源码开头)

status_code 是 HTTP 状态码,200 表示成功;resp.text 是服务器返回的文本内容。timeout=10 表示最多等 10 秒,这个参数建议永远都带上,不然网络卡住时程序会一直挂在那里。

判断请求是否成功

网络请求随时可能失败,先检查状态码再解析内容是好习惯:

import requests

resp = requests.get("https://example.com/not-exist", timeout=10)
print(resp.status_code)        # 输出:404
resp.raise_for_status()        # 状态码是 4xx/5xx 时会抛出异常

把 raise_for_status() 放在 try/except 里,失败时就能拿到明确的错误信息,而不是拿着一份空数据继续往下跑:

import requests

try:
    resp = requests.get("https://example.com", timeout=10)
    resp.raise_for_status()
    print("抓取成功,长度:", len(resp.text))
except requests.RequestException as e:
    print("抓取失败:", e)

传递查询参数

URL 后面那些 ?key=value 可以用 params 参数来传,requests 会自动拼接并做 URL 编码:

import requests

resp = requests.get(
    "https://httpbin.org/get",
    params={"word": "python", "page": 1},
    timeout=10,
)
print(resp.url)
# 输出:https://httpbin.org/get?word=python&page=1

参数值里就算有中文和特殊字符也不用自己转码,直接写就行,比手动拼字符串干净得多。

请求头与 User-Agent

有些网站会检查请求头里的 User-Agent,缺了它可能拿不到正常内容。用一个字典把自定义请求头传进去:

import requests

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
resp = requests.get("https://example.com", headers=headers, timeout=10)
print(resp.status_code)       # 输出:200

保存抓到的内容

拿到文本后写入本地文件,就完成了一次最简单的抓取流程:

import requests

resp = requests.get("https://example.com", timeout=10)
resp.encoding = "utf-8"          # 指定编码,避免中文乱码
with open("page.html", "w", encoding="utf-8") as f:
    f.write(resp.text)
print("已保存", len(resp.text), "个字符")

如果抓的是图片这类二进制数据,改用 resp.content(字节内容)配合 "wb" 模式写入即可。

小结

  • requests.get() 发起 GET 请求,timeout 一定要设
  • 用 status_code / raise_for_status() 判断请求成败
  • params 传查询参数,headers 自定义请求头
  • resp.text 是解码后的文本,resp.content 是原始字节
  • 抓取前先看看目标网站的 robots.txt,控制好频率,别给人家服务器添麻烦

下一篇可以在这基础上引入 BeautifulSoup,把网页里的标题和链接提取出来,做成真正意义上的结构化爬取。