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

使用jQuery抓取NSEguide网站Support1值报错,寻求解决方案

问题解决:jQuery find()不支持XPath导致的语法错误

错误原因

你使用的//*[@id="left-col"]/div[4]/table/tbody/tr[7]/td[4]是XPath表达式,但jQuery的find()方法仅支持CSS选择器,不原生支持XPath,因此触发语法错误。

解决方法

方法1:将XPath转为CSS选择器使用

把复制的XPath转换成对应的CSS选择器,替换到find()中即可:

$(document).ready(function(){
  // 注意:前端直接发起跨域请求会被浏览器同源策略阻止,建议通过服务器端代理转发
  $.get('https://nseguide.com/stock.php?TATASTEEL', function(html) {
    // 转换后的CSS选择器
    const support1 = $(html).find('#left-col > div:nth-child(4) table tr:nth-child(7) td:nth-child(4)').text().trim();
    alert(support1);
  }).fail(function(err) {
    console.error('请求失败:', err);
    alert('无法获取数据,大概率是跨域限制导致');
  });
});

注:部分浏览器会自动给表格添加<tbody>标签,但实际返回的HTML中可能不存在,所以CSS选择器里可以省略tbody,避免匹配失败。

方法2:原生JS使用XPath查询

如果坚持要用XPath,可以借助原生DOM的document.evaluate()方法解析HTML:

$(document).ready(function(){
  $.get('https://nseguide.com/stock.php?TATASTEEL', function(html) {
    // 将HTML字符串转为DOM文档
    const doc = new DOMParser().parseFromString(html, 'text/html');
    // 执行XPath查询
    const result = doc.evaluate('//*[@id="left-col"]/div[4]/table/tbody/tr[7]/td[4]', doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
    const targetElement = result.singleNodeValue;
    
    if (targetElement) {
      alert(targetElement.textContent.trim());
    } else {
      alert('未找到Support 1对应的元素');
    }
  }).fail(function(err) {
    console.error('请求失败:', err);
    alert('无法获取数据,大概率是跨域限制导致');
  });
});

额外注意:跨域限制问题

前端直接通过$.get请求外部域名的资源会触发浏览器的同源策略,导致请求被拦截。实际开发中需要通过以下方式解决:

  • 搭建服务器端代理,由后端转发请求到目标网站,前端再请求自己的后端接口
  • 检查目标网站是否提供了CORS允许或者JSONP接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:33:20