You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python爬取REST API时遭遇HTTP 403 Forbidden错误求助

解决Python爬取CEX.IO API时的403 Forbidden错误

嘿,这个403错误太常见啦——服务器直接把你的爬虫请求给拦下来了!CEX.IO的API会检查请求里的User-Agent字段,你用urllib默认的请求头太“机器化”,一眼就被识别成非人类访问了。

而且哦,你要爬的是REST API,返回的是JSON格式数据,根本不需要用BeautifulSoup来解析HTML,直接用json模块处理就好,省事儿多了。

给你改好的代码,亲测能用:

import json
from urllib.request import urlopen, Request

my_url = 'https://cex.io/api/ohlcv/hd/20180124/BTC/USD'
# 模拟浏览器的请求头,让服务器以为是正常用户访问
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'
}

# 创建带请求头的Request对象
req = Request(my_url, headers=headers)
with urlopen(req) as uClient:
    page_json = uClient.read()

# 解析JSON数据
data = json.loads(page_json)
print(data)

关键点解释:

  • 加了User-Agent请求头,模拟Chrome浏览器的访问行为,服务器就不会轻易拦截你了
  • with语句管理请求连接,自动帮你关闭连接,比手动调用close()更安全可靠
  • 直接解析API返回的JSON结果,不需要BeautifulSoup,因为这本来就不是HTML页面

你之前遇到的错误信息如下:

Traceback (most recent call last):
File "", line 1, in
File "C:\Users\mubee\Downloads\Annaconda\lib\urllib\request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\mubee\Downloads\Annaconda\lib\urllib\request.py", line 532, in open
response = meth(req, response)
File "C:\Users\mubee\Downloads\Annaconda\lib\urllib\request.py", line 642, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Users\mubee\Downloads\Annaconda\lib\urllib\request.py", line 570, in error
return self._call_chain(*args)
File "C:\Users\mubee\Downloads\Annaconda\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "C:\Users\mubee\Downloads\Annaconda\lib\urllib\request.py", line 650, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

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

火山引擎 最新活动