可正常访问的URL用urllib请求返回HTTP Error 404: Not Found问题求助
问题原因
雅虎财经配置了反爬虫校验机制,会校验HTTP请求的User-Agent字段识别请求来源,你直接用urllib.urlopen发起请求时,默认的User-Agent会标记为Python爬虫,被服务端拦截后返回404错误,和URL本身是否可访问无关。
解决方法
- 构造自定义请求头,把
User-Agent设置为普通浏览器的标识,模拟浏览器发起请求 - 用
urllib.request.Request封装请求对象,再调用urlopen访问
修改后的可运行代码如下:
import pandas as pd from bs4 import BeautifulSoup import urllib.request as ur index = 'MSFT' url_is = 'https://finance.yahoo.com/quote/' + index + '/financials?p=' + index # 构造自定义请求头,模拟Chrome浏览器访问 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' } # 封装请求对象 req = ur.Request(url=url_is, headers=headers) # 发起请求读取数据 read_data = ur.urlopen(req).read()
如果修改UA后仍然被拦截,可以补充Accept、Referer等更多浏览器默认携带的请求头字段,进一步还原真实浏览器的请求特征即可。
内容的提问来源于stack exchange,提问作者R__
相关产品推荐
相关产品推荐

