第1章:HTTP请求基础

做CMS数据采集,说白了就是跟HTTP打交道。你想想看,不管是抓新闻、爬商品、还是同步用户数据,本质上都是在发HTTP请求。这一章,咱们就把最基础的东西讲透。

1.1 Requests库:Python界的瑞士军刀

Python里发HTTP请求的库不少,但Requests绝对是最顺手的那个。我个人习惯用它,原因很简单——代码写起来像说话一样自然。

安装就更简单了,一行命令搞定:

pip install requests

嗯,这里要注意。如果你用的是虚拟环境(我强烈建议你用),记得先激活环境再装。我在项目中遇到过有人直接在系统Python里装包,结果把环境搞乱了,折腾了半天。

1.2 GET请求:拿数据,就这么简单

GET请求,说白了就是问服务器要东西。比如你要抓一个新闻列表:

import requests

url = "https://api.example.com/news"
response = requests.get(url)

# 看看返回了什么
print(response.status_code)  # 200 表示成功
print(response.text)          # 原始响应内容
print(response.json())        # 如果是JSON,直接解析

这里有个坑,我刚开始做采集时踩过。有的网站会限制请求频率,你发太快了直接给你封IP。所以,我建议你每次请求之间加个延时:

import time

for page in range(1, 11):
    url = f"https://api.example.com/news?page={page}"
    resp = requests.get(url)
    print(f"第{page}页数据获取成功")
    time.sleep(1)  # 等一秒再发下一个请求
小技巧:time.sleep() 控制请求频率,既是对服务器的尊重,也是保护自己不被封。

1.3 POST请求:给服务器送数据

POST请求,就是给服务器提交数据。比如登录、提交表单、上传文件,都用POST。看个例子:

import requests

url = "https://api.example.com/login"
data = {
    "username": "admin",
    "password": "123456"
}

response = requests.post(url, data=data)
print(response.json())

你可能会问,什么时候用GET,什么时候用POST?我有个简单的判断标准:

  • 只是查数据,不改变服务器状态 → GET
  • 要创建、修改、删除数据 → POST

当然,实际开发中还有PUT、DELETE这些方法,但CMS采集里,GET和POST占了90%以上的场景。

1.4 设置Headers与User-Agent:伪装成浏览器

很多网站会检查请求头,发现你是爬虫就直接拒绝。这时候就需要设置Headers,把自己伪装成浏览器。

User-Agent是最关键的字段,它告诉服务器你是什么客户端。我一般这么写:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Referer": "https://www.example.com/"
}

response = requests.get(url, headers=headers)
避坑指南: 我曾经遇到过一个网站,它不光检查User-Agent,还检查Referer。如果你直接从代码里发请求,Referer是空的,就会被拦截。解决办法就是加上Referer,模拟从某个页面跳转过来的。

另外,我建议你准备几个不同的User-Agent轮着用。为什么?因为同一个UA发太多请求,容易被识别出是爬虫。你可以搞个列表:

import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
    "Mozilla/5.0 (X11; Linux x86_64) ..."
]

headers = {"User-Agent": random.choice(user_agents)}

1.5 处理Cookies与Session:保持登录状态

很多CMS系统需要登录才能采集数据。登录成功后,服务器会给你一个Cookie,后续请求带上它,服务器才知道你是谁。

Requests处理Cookie有两种方式:

方式一:手动设置Cookie

cookies = {
    "session_id": "abc123",
    "user_token": "xyz789"
}

response = requests.get(url, cookies=cookies)

方式二:使用Session对象(推荐)

我个人更推荐用Session。它会自动帮你保存Cookie,后续请求自动带上:

session = requests.Session()

# 先登录
login_data = {"username": "admin", "password": "123456"}
session.post("https://api.example.com/login", data=login_data)

# 后续请求自动携带Cookie
resp1 = session.get("https://api.example.com/profile")
resp2 = session.get("https://api.example.com/orders")

你看,用Session多省事。不用手动去管Cookie的存储和传递,Session对象全帮你搞定了。

核心要点: Session对象就像一个浏览器标签页,你登录一次,后续所有请求都带着登录状态。这在采集需要登录的CMS系统时特别有用。

1.6 本章知识体系

下面这张图,把本章的核心知识点串起来了。你可以对照着回顾一下:

HTTP请求基础 1. Requests安装 2. GET请求 3. POST请求 4. Headers设置 pip install requests response = requests.get(url) requests.post(url, data=data) User-Agent / Referer 5. Cookies与Session 手动设置Cookie / 使用Session对象

这张图把本章的五个核心知识点串起来了。从安装Requests开始,到GET和POST两种基本请求方式,再到Headers伪装和Cookie/Session状态管理。每一步都是CMS数据采集的必备技能。

我的建议: 初学者先别急着搞复杂的。把GET和POST练熟,学会设置Headers,再掌握Session的使用。这三板斧够你应付80%的CMS采集场景了。

好了,第一章就到这里。记住,HTTP请求是数据采集的基石。你把这些基础打牢了,后面学解析、学反爬、学异步采集,都会轻松很多。

公众号:蓝海资料掘金营,微信deep3321