F#Data HTML类型提供程序缺少表类型

时间:2018-08-05 11:57:50

标签: f# f#-data f#-3.0

位于

的文档

http://fsharp.github.io/FSharp.Data/library/HtmlProvider.html

声称以下内容;

“生成的类型提供了它已设法从给定的HTML文档中解析出的表的类型空间。每种类型的名称均来自提供的id,标题,名称,摘要或标题属性/标签。如果没有这些实体中存在一个,则该表将简单地命名为Tablexx,如果所有表都被整理成一个列表,则xx是HTML文档中的位置。“

我正在尝试解析以下网址 optionsdata = = HtmlProvider <“ http://finance.yahoo.com/q/op?s=DDD+Options”>

我没有看到任何Tablexx ...类型。任何帮助表示赞赏,并在此先感谢。当我查看源代码时,有/ table标记,并且html页面上肯定有表。

1 个答案:

答案 0 :(得分:2)

当您通过脚本发出简单的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)来加载实际数据。