f# - F#Data HTML 类型提供程序缺少表类型
问题描述
文档位于
http://fsharp.github.io/FSharp.Data/library/HtmlProvider.html
声明以下内容;
“生成的类型提供了一个表的类型空间,它已设法从给定的 HTML 文档中解析出来。每种类型的名称都派生自提供的 id、标题、名称、摘要或标题属性/标签。如果这些实体都没有如果所有表都被展平成一个列表,则该表将简单地命名为 Tablexx,其中 xx 是 HTML 文档中的位置。"
我正在尝试解析以下 url optionsdata = = HtmlProvider<" http://finance.yahoo.com/q/op?s=DDD+Options ">
我没有看到任何 Tablexx... 类型。任何帮助表示赞赏,并在此先感谢。当我查看源代码时,有 /table 标签,并且 html 页面上肯定有表格。
解决方案
GET
当您从脚本发出普通请求时,雅虎似乎不会向您发送与您在网络浏览器中看到的内容相同的页面。这就是类型提供者看不到表格的原因——它们实际上在到达类型提供者的 HTML 中丢失了。您可以通过查看Html
类型提供程序在使用它加载页面时获得的 来看到这一点:
type DDD = HtmlProvider<"http://finance.yahoo.com/q/op?s=DDD+Options">
DDD.GetSample().Html |> printfn "%A"
作为修复,您可以在浏览器中查看源代码,将其保存在本地文件中,然后将其传递给类型提供程序。使用它,我能够编写以下代码:
type DDD = HtmlProvider<"c:/temp/yahoo.html">
let ddd = DDD.GetSample()
for r in ddd.Tables.Table1.Rows do
printfn "%s" r.``Contract Name``
该GetSample
方法只是从文件系统加载文件。我假设您想要解析实时网页 - 为此,您需要弄清楚如何从 Yahoo 获取正确的 HTML(大概是通过设置一些 HTTP 标头和 cookie)。然后你可以调用DDD.Parse(html)
来加载你的实际数据。
推荐阅读
- python - 如何在 Python 中重新运行 scrapy 请求对象?
- python - 如何使用 Python 同时流式传输多个音频文件
- bash - 在不同的计算机上加密和解密密码
- angular-cli - 如何更新所有 Angular 依赖项?
- c - 如何使用指向 c 中的结构的指针读取字段?
- c# - asp.net页面webmethord上的ajax调用返回加载资源失败:服务器响应状态为500(内部服务器错误)
- java - 当我显示列表中的元素时,它们就在那里,但是当我想在方法中使用列表时,什么都没有显示
- python - 如何在 heroku 上运行无限程序(不重启或休眠)
- java - 为什么我不能禁用 Spring Boot 自动生成的密码和用户?
- mysql - Azure 数据工厂 - 从 MySql 或 Blob 存储提取数据时出错