请求协助解决网页爬取时的403 Forbidden错误
解决爬取G2网站时的403 Forbidden错误
爬取G2网站数据时,仅设置User-Agent仍返回403 Forbidden,可从以下几个方向排查解决:
- 补充完整请求头:网站反爬校验通常不止User-Agent,需模拟真实浏览器的请求头字段,比如Accept、Accept-Language、Referer等,让请求更接近正常用户访问。
- 校验目标URL有效性:你使用的
https://www.g2.com/O大概率是错误路径,G2的合法URL格式一般为https://www.g2.com/或https://www.g2.com/products/xxx,先确认目标地址是否正确。 - 使用会话维持连接:单次请求容易被识别为爬虫,用会话(Session)模拟浏览器的持续连接状态,提升请求的真实性。
- 控制请求频率:短时间内频繁请求会触发网站反爬机制,添加请求间隔避免被拦截。
修改后的示例代码(使用requests库)
import requests from time import sleep # 模拟Chrome浏览器的完整请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Referer': 'https://www.g2.com/' } # 替换为正确的目标URL,以G2首页为例 target_url = "https://www.g2.com/" # 初始化会话,维持连接状态 session = requests.Session() session.headers.update(headers) try: # 添加2秒请求间隔,避免触发反爬 sleep(2) response = session.get(target_url) response.raise_for_status() # 主动抛出HTTP错误 # 打印响应前500字符验证结果 print(response.text[:500]) except requests.exceptions.HTTPError as e: print(f"HTTP错误详情: {e}") except Exception as e: print(f"其他错误详情: {e}")
如果以上方法仍无效,说明网站可能启用了更严格的反爬机制(如验证码、JavaScript渲染校验),此时需要使用Selenium、Playwright等工具模拟真实浏览器的交互行为。
内容的提问来源于stack exchange,提问作者Raunak Singh
相关产品推荐
相关产品推荐

