HTMLAgilityPack 使用 C# 解析 HTML 时出现问题

2023-12-09

我只是想了解 HTMLAgilityPack 和 XPath,我试图从纳斯达克网站获取(HTML 链接)公司列表;

http://www.nasdaq.com/quotes/nasdaq-100-stocks.aspx

我目前有以下代码;

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

        // Create a request for the URL.        
        WebRequest request = WebRequest.Create("http://www.nasdaq.com/quotes/nasdaq-100-stocks.aspx");
        // Get the response.
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        // Get the stream containing content returned by the server.
        Stream dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Read into a HTML store read for HAP
        htmlDoc.LoadHtml(responseFromServer);

        HtmlNodeCollection tl = htmlDoc.DocumentNode.SelectNodes("//*[@id='indu_table']/tbody/tr[*]/td/b/a");
        foreach (HtmlAgilityPack.HtmlNode node in tl)
        {
            Debug.Write(node.InnerText);
        }            

        // Cleanup the streams and the response.
        reader.Close();
        dataStream.Close();
        response.Close();

我使用了 Chrome 的 XPath 插件来获取以下内容的 XPath:

//*table[@id='indu_table']/tbody/tr[*]/td/b/a

运行我的项目时,我收到 xpath 未处理的异常,表明它是无效令牌。

我有点不确定它出了什么问题,我尝试在上面的 tr[*] 部分中输入一个数字,但我仍然遇到相同的错误。

我最近一个小时一直在看这个,有什么简单的吗?

thanks


由于数据来自 javascript,因此您必须解析 javascript 而不是 html,因此 Agility Pack 的帮助不大,但它使事情变得更容易一些。以下是如何使用 Agility Pack 来完成此操作Newtonsoft JSON.Net解析 Javascript。

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.Load(new WebClient().OpenRead("http://www.nasdaq.com/quotes/nasdaq-100-stocks.aspx"));
List<string> listStocks = new List<string>();
HtmlNode scriptNode = htmlDoc.DocumentNode.SelectSingleNode("//script[contains(text(),'var table_body =')]");
if (scriptNode != null)
{
  //Using Regex here to get just the array we're interested in...
  string stockArray = Regex.Match(scriptNode.InnerText, "table_body = (?<Array>\\[.+?\\]);").Groups["Array"].Value;
  JArray jArray = JArray.Parse(stockArray);
  foreach (JToken token in jArray.Children())
  {
    listStocks.Add("http://www.nasdaq.com/symbol/" + token.First.Value<string>().ToLower());
  }
}

更详细地解释一下,数据来自页面上的一个大 JavaScript 数组var table_body = [...。 每只股票都是数组中的一个元素,并且本身就是一个数组。

["ATVI", "Activision Blizzard, Inc", 11.75, 0.06, 0.51, 3058125, 0.06, "N", "N"]

因此,通过解析数组并获取第一个元素并附加修复 url,我们得到与 javascript 相同的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTMLAgilityPack 使用 C# 解析 HTML 时出现问题 的相关文章

  • 为什么相同的代码在同一台计算机上的执行时间可能不同?

    我是 C 编程新手 我编写了代码并希望获得它的运行时 这就是我所做的 每次运行代码时 我都会得到不同的运行时值 这样对吗 或者我的代码有问题吗 int main int argc char argv time t start end sta
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 私有模板函数

    我有一堂课 C h class C private template
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • PHP parse_str 函数用空格替换+号

    我有一个变量 我通过 url 作为jSON字符串 其中一部分是以下字符串 signature 8W2sp J kC6fh8a88jabNPuA8048sShDnXNOo1jSQ 当我读取 url 并使用解析字符串时parse str php
  • 可以在现有 ASPNET.Core Web 项目中调用和/或使用辅助服务吗?

    我一直在阅读和学习 Net Core 3 0 中提供的新 Worker Service 功能 我一直在使用微软的这个链接 ASP NET Core 中托管服务的后台任务 我不明白的是 这些辅助服务概念是否可以引入到现有的 ASPNET We
  • 仅使用 data.table 将 NA 替换为 data.table 中的最后一个非 NA

    我想更换NA最后一个非 NA 值的值data table并使用data table 我有一个解决方案 但它比na locf library data table library zoo library microbenchmark f1 l
  • Google Drive API 403 禁止

    我们使用 Google Drive API 来允许用户浏览并选择要在报告中使用的文件 我们的一位用户 该问题并不普遍 在尝试获取文件列表时遇到错误 如下 从 Google 返回的 JSON 正文 error errors domain gl
  • HttpClient - 如何判断服务器是否更快地关闭?

    我正在使用 NETHttpClient向我的服务器发送请求 我已经设定HttpClient Timeout属性为 10 秒 所以我得到了A task was cancelled每当服务器无法在 10 秒内处理我的请求时 就会出现异常 到这里
  • Windows快捷方式的内部结构是怎样的?

    一台计算机上有 3 个硬盘 2 个 Windows XP 1 个 Windows 7 依次从每个硬盘加载操作系统 我发现在第一个 XP 中创建的一些工作快捷方式 不是全部 在第二个 XP 和 Windows 7 中不起作用 不可用于查看快捷
  • Xcode 4.5 iOS 6.0 模拟器方向不起作用

    我已经将我的 Xcode 更新到 4 5 我已经实现了如下方向方法 BOOL shouldAutorotate return YES NSUInteger supportedInterfaceOrientations return UIIn
  • ASMX 操作 404s,但 ASMX 服务描述没有,url 路由问题?

    所以我发现自己遇到了一个难题 我们的应用程序中有一些旧的 asmx Web 服务 多年来一直运行良好 突然间 他们停止了构建服务器 CI 上的工作 我说停止工作 因为即使当我导航到服务时显示服务描述 调用任何操作都不会路由到服务 Web 表
  • 在 React 中,ref 是引用虚拟 DOM 还是实际 DOM?

    我假设虚拟 DOM 并且 React 通过比较来处理它 但我有一位招聘人员说 ref 会影响实际的 DOM 我不明白这是怎么回事 我认为他们只是误会了 Refs 应该引用实际的 DOM Refs 的一种用法是与第三方 DOM 库集成 因此您
  • 使用 Lodash 合并复杂对象数组

    我是 Lodash 的新手 正在尝试解决这个问题 但可以找到一个好方法 我有一个从数据库返回的对象数组 数据结构如下 var data index 1 Aoo a1 Boo b2 index 1 Aoo a2 Boo b2 index 2
  • 无效的 Swift 支持/无效的 Swift 实现

    我想上传一个用 swift 编写的应用程序 应用程序加载器成功交付应用程序 但几分钟后我收到苹果的回复 无效的 Swift 支持 该捆绑包包含无效的 Swift 实现 该应用程序可能是使用不合规或预发布的工具构建或签名的 访问develop
  • 如何更新已从 BOT 发送给用户的自适应卡?

    我已经发送了包含捕获详细信息和按钮的卡片 从任务模块单击提交后 该模块将通过 http API 保存详细信息 此处的活动类型为 调用 现在我必须更新现有的自适应卡 我有更新消息的代码 但如何更新卡或再次重新发送卡 connector new
  • Webpack 提供的 Angular 2 应用程序基于环境的属性?

    我正在使用由 JHipster 生成并由 Spring Boot 服务器提供服务的独立 Angular 控制台 我希望根据环境 本地 开发 产品等 提供具有不同属性的应用程序 我看到很多关于配置每个环境的 webpack 构建的帖子 但我需
  • PHP/Regex:bbcode [s] 或 [strike] 的简单正则表达式无法工作

    对于一个愚蠢的 bbcode 解析器 我想将两个定义添加到一个中 我最初的 preg replace 定义是这样的 s s si
  • 无法在 Heroku 上使用 Gmail 发送电子邮件

    我无法让我的 Rails 应用程序使用 Gmail 发送电子邮件 我可以在本地开发环境中发送电子邮件 但无法从 Heroku 发送 这是我的配置文件 应用程序 rb config action mailer smtp settings ad
  • Spark Streaming StreamingContext.start() - 启动接收器时出错 0

    我有一个使用 Spark Streaming 的项目 我使用 spark submit 运行它 但遇到了以下错误 15 01 14 10 34 18 ERROR ReceiverTracker Deregistered receiver f
  • 如何使 Satchmo 在 Google App Engine 中工作

    我知道数据存储方面存在很大差异 但既然 django 是捆绑的并且它从 Satchmo 中抽象出数据存储 那么可以做些什么吗 事实上 我不是 Python 爱好者 到目前为止主要是 Java PHP 但我愿意学习 另外 如果今天不可能 让我
  • 如何将 Node.js 应用程序上传到 FTP 服务器?

    我对 Node js 有点陌生 但我构建了一个应用程序 并对它非常满意 我想知道如何将 Node js 应用程序上传到 FTP 服务器 有可能做到这一点吗 Node JS 应用程序只是文件的集合 您可以像任何其他文件一样使用 FTP 将它们
  • 实体框架代码首先将 TPT 转换为 TPH

    我使用 EF Code First 使用 TPT 开发了一个应用程序 发布附件 评论等 它运行良好 并且正在与许多客户进行 beta 测试 但是 存在许多层次结构 因此 我有一个包含各种继承模型的基本模型 每个模型都包含许多属性 这些属性本
  • HTMLAgilityPack 使用 C# 解析 HTML 时出现问题

    我只是想了解 HTMLAgilityPack 和 XPath 我试图从纳斯达克网站获取 HTML 链接 公司列表 http www nasdaq com quotes nasdaq 100 stocks aspx 我目前有以下代码 Html