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

F#数据HTML类型提供程序缺少表类型,f#,f#-data,f#-3.0,F#,F# Data,F# 3.0,文档位于 主张如下 “生成的类型提供了一个表的类型空间,它已设法从给定的HTML文档中解析出这些表。每个类型的名称都是从提供的id、title、name、summary或caption属性/标记派生的。如果这些实体都不存在,那么该表将被简单地命名为Tablexx,其中xx是HTML文档中的位置,如果所有的表都被修饰成一个列表。" 我正在尝试解析以下url 选项数据==HtmlProvider 我没有看到任何Tablexx…类型。任何帮助都非常感谢。当我查看源代码时,有/table标记,html

文档位于

主张如下

“生成的类型提供了一个表的类型空间,它已设法从给定的HTML文档中解析出这些表。每个类型的名称都是从提供的id、title、name、summary或caption属性/标记派生的。如果这些实体都不存在,那么该表将被简单地命名为Tablexx,其中xx是HTML文档中的位置,如果所有的表都被修饰成一个列表。"

我正在尝试解析以下url 选项数据==HtmlProvider


我没有看到任何Tablexx…类型。任何帮助都非常感谢。当我查看源代码时,有/table标记,html页面上肯定有表。

看起来Yahoo向您发送的页面内容与您在web浏览器中从脚本发出普通
GET
请求时看到的内容不同。T这就是为什么类型提供程序看不到表的原因-它们实际上在到达类型提供程序的HTML中缺失。您可以通过查看类型提供程序在使用它加载页面时获得的
HTML
来看到这一点:

type DDD = HtmlProvider<"http://finance.yahoo.com/q/op?s=DDD+Options">
DDD.GetSample().Html |> printfn "%A"
类型DDD=HtmlProvider
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``
类型DDD=HtmlProvider
设ddd=ddd.GetSample()
对于ddd.Tables.Table1.Rows中的r
printfn“%s”r.``合同名称``

GetSample
方法只是从文件系统加载文件。我假设您想要解析实时网页-为此,您需要弄清楚如何从Yahoo获取正确的HTML(大概是通过设置一些HTTP头和cookie)。然后您可以调用
DDD.parse(HTML)
加载您的实际数据。

当您从脚本发出普通的
GET
请求时,Yahoo似乎没有向您发送与您在web浏览器中可以看到的内容相同的页面。这就是类型提供程序无法看到表的原因-它们实际上在访问类型提供程序的HTML中丢失了。您可以通过查看类型提供程序在使用它加载页面时获得的
Html

type DDD = HtmlProvider<"http://finance.yahoo.com/q/op?s=DDD+Options">
DDD.GetSample().Html |> printfn "%A"
类型DDD=HtmlProvider
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``
类型DDD=HtmlProvider
设ddd=ddd.GetSample()
对于ddd.Tables.Table1.Rows中的r
printfn“%s”r.``合同名称``
GetSample
方法只是从文件系统加载文件。我假设您想要解析实时网页-为此,您需要弄清楚如何从Yahoo获取正确的HTML(大概是通过设置一些HTTP头和cookie)。然后您可以调用
DDD.parse(HTML)
来加载实际数据