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

Python网页爬取遇HTTP 403错误,如何解决指定URL访问问题?

解决爬取特定URL时的HTTP 403错误

我尝试爬取https://hayabusa.open2ch.net/test/read.cgi/livejupiter/1700322786/l50时持续遇到HTTP 403错误,以下是初始代码及错误信息:

初始代码

import requests

url = 'https://hayabusa.open2ch.net/test/read.cgi/livejupiter/1700322786/l50'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
    'Referer': 'https://www.google.com/'
}

res = requests.get(url, headers=headers)

print('res=', res)

运行错误

res= <Response [403]>

我还尝试添加更多请求头,但问题仍未解决:

headers = {
    'authority': 'www.google.com',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-US,en;q=0.9',
    'cache-control': 'max-age=0',
    'cookie': 'SID=ZAjX93QUU1NMI2Ztt_dmL9YRSRW84IvHQwRrSe1lYhIZncwY4QYs0J60X1WvNumDBjmqCA.; __Secure-#..',
    'sec-ch-ua': '&quot;Not/A)Brand&quot;;v=&quot;99&quot;, &quot;Google Chrome&quot;;v=&quot;115&quot;, &quot;Chromium&quot;;v=&quot;115&quot;',
    'sec-ch-ua-arch': '&quot;x86&quot;',
    'sec-ch-ua-bitness': '&quot;64&quot;',
    'sec-ch-ua-full-version': '&quot;115.0.5790.110&quot;',
    'sec-ch-ua-full-version-list': '&quot;Not/A)Brand&quot;;v=&quot;99.0.0.0&quot;, &quot;Google Chrome&quot;;v=&quot;115.0.5790.110&quot;, &quot;Chromium&quot;;v=&quot;115.0.5790.110&quot;',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '&quot;&quot;',
    'sec-ch-ua-platform': 'Windows',
    'sec-ch-ua-platform-version': '15.0.0',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
    'x-client-data': '#..',
}

可行的解决方法

1. 修正请求头核心字段

你当前设置的authority是第三方域名,与目标网站不符,这会被服务器判定为异常请求。同时调整Referer为目标网站自身域名,避免跨域嫌疑:

headers = {
    'authority': 'hayabusa.open2ch.net',
    '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': 'https://hayabusa.open2ch.net/',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
}

2. 复制浏览器真实请求头

直接用浏览器访问目标URL,打开F12开发者工具→网络标签,找到对应请求的完整请求头(敏感Cookie可暂时移除,或保留有效Cookie),复制后替换到代码中,最大程度模拟真实浏览器请求。

3. 使用Session保持会话状态

requests.Session()可自动处理Cookie和连接复用,模拟浏览器的持续会话,避免单次请求被拦截:

import requests

url = 'https://hayabusa.open2ch.net/test/read.cgi/livejupiter/1700322786/l50'

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': 'https://hayabusa.open2ch.net/'
}

# 先请求主页获取初始会话Cookie
session.get('https://hayabusa.open2ch.net/', headers=headers)
# 再请求目标页面
res = session.get(url, headers=headers)

print('res=', res)

4. 绕过Cloudflare等反爬服务

如果以上方法都无效,大概率网站使用了Cloudflare之类的反爬防护。可以用cloudscraper库绕过(先安装:pip install cloudscraper):

import cloudscraper

url = 'https://hayabusa.open2ch.net/test/read.cgi/livejupiter/1700322786/l50'

scraper = cloudscraper.create_scraper()
res = scraper.get(url)

print('res=', res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:36:05