使用BeautifulSoup解析指定网页href元素失败,疑似Cookie问题求解决
解决思路与修正代码
1 修正代码基础错误
现有代码存在导入不匹配问题:你将requests库别名为rq,但实际调用时用了requests.get,会直接触发命名错误,需先修正该基础问题。
2 核心问题处理
你猜测的Cookie限制确实是核心原因:该网站在用户未同意Cookie政策的前提下,返回的HTML不会包含目标资源链接,需要先完成Cookie授权才能拿到完整页面内容。
3 完整实现步骤
- 用
requests.Session()维持会话,确保Cookie在多次请求中自动传递 - 请求头添加浏览器UA标识,避免被基础反爬策略拦截
- 若仍拿不到内容,可通过浏览器F12抓包获取同意Cookie后的请求头Cookie值,填入请求头即可
4 可运行示例代码
from bs4 import BeautifulSoup import requests # 初始化会话自动维持Cookie session = requests.Session() # 模拟浏览器请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" } session.headers.update(headers) page = session.get('https://www.murray-intl.co.uk/en/literature-library') soup = BeautifulSoup(page.content, 'html.parser') link = soup.find_all('a', class_='btn btn--naked btn--icon-left btn--block focus-within') if link: url = link[0].get('href') print(url) else: # 打印返回的页面内容排查是否未拿到完整数据 print(soup.prettify())
5 兜底方案
如果上述代码仍无法获取目标元素,说明页面是JS动态渲染的,可替换为Selenium、Playwright等模拟浏览器的工具加载页面,工具会自动处理Cookie弹窗交互,加载完成后直接提取页面元素即可。
内容的提问来源于stack exchange,提问作者Sjamsing
相关产品推荐
相关产品推荐

