使用Python和Jupyter Notebook爬取网页时遭遇403错误求解决
解决爬取足球统计数据时的403错误方案
伪装请求头,模拟真实浏览器
多数网站会校验请求头里的User-Agent,若请求用了默认标识或未携带,极易被拦截。给session补上完整请求头试试:import requests 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', 'Referer': '目标网站的首页URL', # 比如爬取某足球数据页时,将Referer设为该网站首页 'Accept-Language': 'zh-CN,zh;q=0.9' } session.headers.update(headers) response = session.get('目标数据URL') print(response.status_code)注意把
User-Agent换成当前主流浏览器的标识,Referer要对应目标网站域名。使用代理IP规避IP封禁
若你的IP已被网站拉黑,更换IP即可解决。可使用免费代理池,或付费代理服务,配置到session中:proxies = { 'http': 'http://代理IP:端口', 'https': 'https://代理IP:端口' } response = session.get('目标数据URL', proxies=proxies)免费代理稳定性差,若需频繁爬取,建议选用付费代理更靠谱。
添加请求延迟,避免高频访问
短时间内大量请求会触发反爬机制,给每个请求添加随机延迟:import time import random # 请求前随机延迟1-3秒 time.sleep(random.uniform(1, 3)) response = session.get('目标数据URL')模拟真实浏览器行为(针对JS渲染或强反爬)
若网站用JS动态加载数据或有严格反爬(如验证浏览器指纹),纯HTTP库requests可能无法应对,试试用Selenium或Playwright模拟真实浏览器操作:
以Selenium为例:from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('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') driver = webdriver.Chrome(options=options) driver.get('目标数据URL') page_source = driver.page_source # 后续解析page_source获取数据 driver.quit()检查网站的robots.txt规则
先查看目标网站的robots.txt(格式如https://目标域名/robots.txt),确认要爬取的内容是否被禁止抓取,若被禁止,需调整爬取范围,或联系网站获取授权。
内容的提问来源于stack exchange,提问作者ArulMK
相关产品推荐
相关产品推荐

