【发布时间】:2016-03-28 01:58:26
【问题描述】:
我正在尝试使用 F# 和 FSharp.Data 库从网页中抓取股票股息数据。在http://www.nasdaq.com/symbol/ibm/dividend-history 可以看到一个示例页面。
为了请求网页,我的代码设置为一个简单的控制台应用程序作为示例,如下所示:
open FSharp.Data
[<EntryPoint>]
let main argv =
let url = "http://www.nasdaq.com/symbol/ibm/dividend-history"
let result = Http.RequestString(url)
System.Console.ReadLine() |> ignore
0 // return an integer exit code
运行时,RequestString 方法出错:
“在 FSharp.Core.dll 中发生了“System.ArgumentOutOfRangeException”类型的未处理异常
附加信息:长度不能小于零。"
看起来页面的格式设置为“传统”抓取方法行不通。任何想法或想法将不胜感激。
【问题讨论】:
-
我自己试过了,发现:
FSharp.Data.HttpHelpers.getAllCookiesFromHeader@671.Invoke(Int32 i, String cookiePart) in ...FSharp.Data\src\Net\Http.fs:line 675是实际崩溃的地方。它正在尝试调用String.Substring,以便您获得不超过第一个“=”符号的长度。遗憾的是,这是使用 String.IndexOf 定义的,当没有“=”符号时它给出 -1。相关源码:github.com/fsharp/FSharp.Data/blob/master/src/Net/Http.fs#L674和评论:.NET has trouble parsing some cookies. See http://stackoverflow.com/a/22098131/165633
标签: f# web-scraping f#-data