使用urllib.request访问雅虎财经股票URL时遭遇HTTP 404错误
解决urllib.request访问股价URL出现404错误的方案
常见原因及处理方法
1. 添加浏览器请求头伪装
多数财经网站会通过检查User-Agent识别爬虫,urllib默认的请求头会被拦截。你需要自定义请求头模拟浏览器访问:
import urllib.request as ur from bs4 import BeautifulSoup url_is = "你的目标股价URL" # 替换为当前主流浏览器的User-Agent,可从浏览器开发者工具中获取 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } # 构造带请求头的Request对象 req = ur.Request(url_is, headers=headers) read_data = ur.urlopen(req).read() soup_is = BeautifulSoup(read_data, 'lxml')
2. 处理Cookie与会话验证
部分网站需要先建立会话(获取Cookie)才能访问数据页面,直接请求目标URL会被判定为未授权返回404:
import urllib.request as ur from bs4 import BeautifulSoup url_is = "你的目标股价URL" home_url = "网站首页URL" # 先访问首页初始化会话Cookie headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } # 创建带Cookie处理的Opener cookie_handler = ur.HTTPCookieProcessor() opener = ur.build_opener(cookie_handler) # 先访问首页获取会话标识 opener.open(home_url) # 再请求目标页面 req = ur.Request(url_is, headers=headers) read_data = opener.open(req).read() soup_is = BeautifulSoup(read_data, 'lxml')
3. 验证URL的实际有效性
浏览器中能打开的URL可能存在重定向,若urllib处理重定向时出现异常也会返回404。建议:
- 打开浏览器开发者工具(F12),切换到「网络」标签,刷新页面后查看实际请求的URL(而非地址栏显示的URL)
- 对比代码中的URL是否与实际请求地址完全一致,注意是否包含动态参数(如时间戳、会话ID)
4. 改用更易用的requests库
urllib的API相对繁琐,requests库内置了请求头、Cookie管理和错误处理,能减少这类问题:
import requests from bs4 import BeautifulSoup url_is = "你的目标股价URL" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } # 发起请求并自动处理重定向、Cookie response = requests.get(url_is, headers=headers) # 主动抛出HTTP错误(如404、500)便于排查 response.raise_for_status() soup_is = BeautifulSoup(response.text, 'lxml')
内容的提问来源于stack exchange,提问作者davo1176
相关产品推荐
相关产品推荐

