You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

urlread2读取MarketWatch数据失效,MATLAB脚本返回空矩阵求排查

故障原因分析及解决思路

核心原因推测

从你的描述和代码来看,主要有几个大概率的问题点:

  • 不必要的URL参数触发反爬:你在原URL后拼接了?term=urlread2,这完全是多余的——正常访问MarketWatch的财报页面根本不需要这个参数,这种异常的请求参数很容易被网站的反爬系统识别并拦截,直接返回空内容。
  • HTTP请求被强制跳转/拦截:现在MarketWatch已经强制使用HTTPS协议,你用HTTP发起请求会被重定向,但urlread2默认的跳转处理可能不完善,或者因为缺少浏览器标识的请求头,被服务器判定为非合法请求而拒绝。
  • 请求头缺失导致拦截:urlread2默认的请求头可能过于简单(比如没有User-Agent、Accept等关键字段),网站会识别出这不是浏览器发起的请求,直接返回空响应。

具体解决步骤

1. 修正URL,移除多余参数

首先删掉代码中拼接queryString的部分,直接使用正确的HTTPS URL:

url = 'https://www.marketwatch.com/investing/stock/AAPL/financials/';

2. 给urlread2添加浏览器请求头

urlread2支持自定义请求头,模拟浏览器发起请求,避免被拦截。修改调用代码,添加必要的请求头参数:

% 定义模拟浏览器的请求头
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',
    'Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language', 'en-US,en;q=0.5'
};

% 调用urlread2时传入请求头
[html, extras] = urlread2(url, 'Get', [], headers);

3. 检查动态内容渲染问题(如果上述步骤仍无效)

如果修改后还是获取不到有效内容,可能是因为MarketWatch的财报数据是通过JavaScript动态加载的——urlread2只能抓取静态HTML,无法执行JS。这种情况下,你需要:

  • 使用MATLAB的webread配合weboptions开启JavaScript渲染(MATLAB R2020b及以上版本支持);
  • 或者使用第三方工具模拟浏览器加载页面后再抓取内容。

举个webread的例子:

opts = weboptions('UserAgent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', ...
    'ContentType', 'text', ...
    'EnableJavaScript', true);
html = webread(url, opts);

额外注意事项

  • 不要频繁发起请求,避免触发网站的频率限制,导致IP被封禁;
  • 定期更新User-Agent字段,模拟不同的浏览器版本;
  • 可以查看extras变量返回的状态码(比如extras.status),如果是403/404,说明请求被拒绝或页面不存在,需要进一步调整请求参数。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:08:22