使用BeautifulSoup抓取https://mirror-h.org遇403错误如何解决
403错误原因及解决方法
核心问题排查
你的代码存在两个直接导致403报错的问题:
- 你调用
pandas.read_html(url)的时机早于headers定义,且该方法发起请求时没有携带任何请求头,网站识别到是爬虫请求直接返回403,这一步就已经触发了报错,后续你写的带headers的requests请求根本没有执行。 - headers字典语法错误,
user-agent:的冒号写在了引号内部,导致请求头格式错误,requests无法正确传递UA标识。
修正后的可运行代码
import requests from bs4 import BeautifulSoup import pandas as pd url = "https://mirror-h.org/archive/page/1" # 修正请求头语法,冒号在引号外,键名规范为User-Agent headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' } # 先发起带请求头的请求,拿到正确响应后再做解析 response = requests.get(url, headers=headers) # 确认响应状态正常再继续后续操作 if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') print(soup) # 如果需要解析页面表格,再把响应内容传给pandas # page = pd.read_html(response.text) else: print(f"请求失败,状态码:{response.status_code}")
仍出现403的补充解决方案
如果按上面代码修改后还是返回403,可以按顺序补充请求头:
- 补充
Referer头,值设置为https://mirror-h.org/模拟从网站首页跳转过来的请求 - 先手动访问一次网站拿到Cookie,把Cookie内容添加到请求头的
Cookie字段中 - 降低请求频率,避免短时间内多次请求被网站IP封禁
内容的提问来源于stack exchange,提问作者Tharika S.
相关产品推荐
相关产品推荐

