的文档
http://fsharp.github.io/FSharp.Data/library/HtmlProvider.html
权利要求如下;
"生成的类型提供了一个表的类型空间,它能够从给定的HTML文档中解析出这些表。每个类型的名称都是从提供的id、title、name、summary或caption属性/标记派生而来的。如果这些实体都不存在,则表将被简单地命名为Tablexx,其中xx是如果所有表都被展开为列表,则HTML文档中的位置。">
我正在尝试解析以下urloptionsdata==HtmlProvider<"http://finance.yahoo.com/q/op?s=DDD+选项">
我没有看到任何Tablexx。。。类型。如有任何帮助,我们将不胜感激,并提前表示感谢。当我查看源代码时,有/table标记,html页面上肯定有表。
当您从脚本发出简单的GET
请求时,雅虎似乎不会向您发送与您在web浏览器中看到的内容相同的页面。这就是为什么类型提供程序看不到表的原因——它们实际上在到达类型提供程序的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
方法只是从文件系统加载文件。我假设你想解析实时网页——为此,你需要弄清楚如何从雅虎获得正确的HTML(大概是通过设置一些HTTP头和cookie(。然后您可以调用DDD.Parse(html)
来加载您的实际数据。