BeautifulSoup爬取同站不同分类页面表格 一个成功一个返回None
问题原因
你遇到的问题核心原因是第二个成人分类页面对访问有前置校验限制,直接用默认requests请求拿到的不是正常的搜索结果页面,而是年龄确认提示页/权限校验页,该页面本身不存在class为table的元素,因此返回None。
你之前对比的是浏览器中已经完成校验后的页面源码,和requests实际请求拿到的响应内容不一致,因此找不到差异。
解决步骤
- 先打印请求的响应状态码和响应文本,确认实际返回内容:
print(r.status_code) print(r.text[:1000]) # 打印前1000个字符排查是否有校验提示
- 添加请求头伪装浏览器,避免被网站反爬拦截默认的requests标识:
import requests from bs4 import BeautifulSoup 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" } url = "目标分类页面链接" r = requests.get(url, headers=headers)
- 处理年龄校验逻辑,两种方案二选一即可:
- 手动方案:在浏览器中打开目标分类页面完成年龄验证,从浏览器请求头中复制已验证的Cookie,加到请求头的
Cookie字段中发起请求 - 自动方案:使用
requests.Session对象,先模拟提交年龄验证表单,Session会自动保存验证通过的Cookie,后续再用该Session发起搜索页面的请求即可拿到正常内容
- 若存在跳转情况,添加
allow_redirects=True参数跟随页面跳转:
r = requests.get(url, headers=headers, allow_redirects=True)
内容的提问来源于stack exchange,提问作者Drakax
相关产品推荐
相关产品推荐

