You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests与bs4爬取特定站点HTML需开启JS及cookies的配置问题

爬虫问题解决方案

Cookie配置方法

requests默认不会在多次请求间自动留存、传递Cookie,你可以通过requests.Session()实现会话级别的Cookie自动管理,不需要手动配置Cookie值,示例代码如下:

import requests
from bs4 import BeautifulSoup

# 初始化会话对象,自动处理全生命周期的Cookie传递
sess = requests.Session()
# 补充正常浏览器的请求头,避免被反爬直接拦截
sess.headers.update({
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5; rv:109.0) Gecko/20100101 Firefox/116.0",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
})

# 所有请求都通过sess实例发起,不要直接用requests.get
# 部分有Cookie同意页的站点,可以先请求一次站点首页获取初始Cookie,再请求目标链接
target_url = "https://agsjournals.onlinelibrary.wiley.com/toc/15325415/2021/69/7"
response = sess.get(target_url, timeout=15)
response.encoding = response.apparent_encoding

# 后续解析HTML逻辑
soup = BeautifulSoup(response.text, "lxml")

用上述方法请求第一个站点,即可解决Please enable cookies的报错。

JS渲染内容处理

你提到的第二个站点内容是前端JS动态渲染生成的,requests只能拿到初始的空白HTML壳,无法获取实际渲染后的内容,可根据需求选择两种方案:

  • 抓后台接口:打开浏览器开发者工具的「网络」面板,筛选Fetch/XHR请求,找到实际加载业务数据的接口,直接用会话请求该接口获取结构化JSON数据,爬取效率更高
  • 模拟浏览器:如果接口加密难以解析,可以使用Selenium、Playwright等无头浏览器工具,模拟真实浏览器运行环境,自动执行JS代码获取渲染完成的完整页面内容,这类工具也自带Cookie管理能力,不需要额外配置Cookie。

额外提示

如果站点开启了Cloudflare基础防护,普通requests请求无法通过验证,可以使用cloudscraper库替代原生requests发起请求,可绕过大部分基础的人机验证规则。

内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:15:04