Python爬虫请求站点提示HTTP 404错误无法连接获取数据如何解决
问题排查与解决方案
- 优先验证目标资源有效性
你使用的URL对应2021年8月29日的历史赛事数据,站点大概率已下线过期赛事的对应路径。可直接将URL复制到浏览器无痕窗口访问,若浏览器也返回404,说明该资源确实已不存在,需要替换为当前有效赛事日期的URL,或查找站点最新的赛事数据接口路径。 - 补全请求头避免反爬伪装404
部分站点反爬策略会对请求头字段不全的请求返回伪装404,你当前仅携带了User-Agent字段,可补全浏览器正常请求携带的其他必填字段,降低被拦截的概率。 - 检查接口参数规则变更
若URL在浏览器可正常打开,说明站点可能调整了接口参数要求,比如新增了必填的鉴权参数、参数名/参数值规则变更,可通过浏览器开发者工具的网络面板,查看正常请求该接口时携带的所有参数和请求头,和你本地的请求配置做对比修正。
修正后参考代码
from bs4 import BeautifulSoup as soup from urllib.request import urlopen as uReq import urllib.request my_url="https://tabletennis.setkacup.com/en/schedule?date=2021-08-29&hall=4&period=1" headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Referer': 'https://tabletennis.setkacup.com/en/', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } request = urllib.request.Request(my_url, None, headers) try: uClient = uReq(request) # 后续页面解析逻辑 page_html = uClient.read() uClient.close() except urllib.error.HTTPError as e: print(f"请求错误,状态码:{e.code},错误信息:{e.reason}")
注意:如果确认目标历史资源已被站点下线,请更换为站点当前公开的有效数据路径,合规爬取公开信息。
内容的提问来源于stack exchange,提问作者JimmyFrutado
相关产品推荐
相关产品推荐

