CANN SIMT特性介绍
2026/5/9 18:08:49
在 Python 爬虫开发中,HTTP Header(请求头 / 响应头)是核心环节:请求头(Request Header)用于模拟浏览器身份、传递请求参数,避免被反爬;响应头(Response Header)包含服务器返回的状态、编码、Cookie 等关键信息。以下分场景详细讲解如何构造请求头、从浏览器获取真实请求头、提取响应头,并结合requests、Selenium等常用库给出示例。
| 类型 | 作用 | 常见字段 |
|---|---|---|
| 请求头 | 客户端向服务器发送请求时携带的信息,用于标识请求身份、偏好等 | User-Agent、Referer、Cookie、Accept、Accept-Encoding、Origin |
| 响应头 | 服务器向客户端返回响应时携带的信息,包含响应状态、数据格式、Cookie 等 | Set-Cookie、Content-Type、Content-Encoding、Server、Date |
爬取普通网页时,最常用的方式是手动构造请求头,核心是设置User-Agent(模拟浏览器),复杂场景需补充Cookie、Referer等。
requests库)import requests # 1. 构造请求头字典(核心字段按需添加) 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", # 可选:表示请求来源页面(部分网站会验证) "Referer": "https://www.jd.com/", # 可选:接受的数据格式 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", # 可选:接受的编码格式 "Accept-Encoding": "gzip, deflate, br", # 可选:语言偏好 "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", # 可选:Cookie(需从浏览器获取,用于保持登录状态) "Cookie": "xxx=xxx; yyy=yyy;" } # 2. 发送请求时携带请求头 url = "https://www.example.com" response = requests.get(url, headers=headers) print("请求是否成功:", response.status_code) # 200表示成功| 字段名 | 必选 | 作用 |
|---|---|---|
User-Agent | 是 | 标识客户端类型(浏览器 / 爬虫),缺少或异常会被反爬拦截 |
Cookie | 否 | 携带用户登录状态、会话信息,爬取需要登录的页面时必须 |
Referer | 否 | 告诉服务器请求的来源,部分网站会验证该字段防止跨站请求 |
Origin | 否 | 跨域请求时携带,标识请求的源域名 |
Accept | 否 | 告诉服务器客户端能接受的响应数据格式 |
手动构造的请求头可能不够 “真实”,尤其是面对反爬严格的网站(如京东、淘宝),直接复制浏览器的真实请求头是最可靠的方式。
F12或右键→检查,打开开发者工具;Doc类型的请求,或 API 接口请求);发送请求后,可通过requests库的响应对象直接提取响应头,用于获取 Cookie、响应编码、服务器信息等。
对于动态渲染的页面(如 JS 加载的内容),Selenium可模拟真实浏览器的请求,通过抓包或浏览器日志获取请求头 / 响应头。
webdriver)from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置Chrome选项 chrome_options = Options() chrome_options.add_argument("--headless=new") # 无头模式(可选) driver = webdriver.Chrome(options=chrome_options) # 访问目标页面 driver.get("https://www.jd.com") # 执行JS获取浏览器的User-Agent(间接获取请求头核心字段) user_agent = driver.execute_script("return navigator.userAgent;") print("Selenium的User-Agent:", user_agent) # 关闭浏览器 driver.quit()mitmproxy/Charles抓包获取 Selenium 的请求头如果需要完整的请求头 / 响应头,可使用抓包工具(如mitmproxy、Charles、Fiddler)拦截 Selenium 的请求,步骤如下:
8080);获取和使用 Header 的核心是模拟真实浏览器的请求行为:
简单场景:手动构造User-Agent等核心字段;
复杂场景:从浏览器复制真实请求头,或用抓包工具获取;
响应头:通过requests的response.headers直接提取。
结合反爬策略(如随机User-Agent、更新 Cookie),可大幅提升爬虫的稳定性和成功率。
requests库会自动处理请求头的大小写(如user-agent和User-Agent等效),无需严格区分;User-Agent池,每次请求随机选择一个;User-Agent)满足后,多数网站可正常访问;robots.txt(如https://www.jd.com/robots.txt),避免爬取禁止的内容。