2016-03-27 13 views
2

F # ve FSharp.Data kütüphanesi kullanılarak web sayfalarından hisse senedi temettü verisini kazımayı deniyorum. Örnek bir sayfa http://www.nasdaq.com/symbol/ibm/dividend-history'da görülebilir. Web kazıma stok temettü verileriyle F #

web sayfasını istemek için, benim kod örnek olarak basit bir konsol uygulaması olarak kurulduktan ve aşağıdaki gibidir: çalıştırmak

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 yöntemi hataları ile:

"Bir işlenmeyen 'System.ArgumentOutOfRangeException' türü istisnası FSharp.Core.dll dosyasında oluştu

Ek bilgi: Uzunluk sıfırdan küçük olamaz. "

Bu sayfa, "geleneksel" kazıma yaklaşımlarının bir şekilde işlenmesi gibi biçimlendirilmiş gibi görünmüyor. Herhangi bir fikir veya düşünce takdir edilecektir.

+0

Bunu kendim denedim ve şunu buldum: '' [email protected] (Int32 i, String cookiePart) ... FSharp.Data \ src \ Net \ Http.fs: satır 675 gerçek çöküşün olduğu yerdi. İlk "=" sembolüne kadar bir uzunluk elde etmek için 'String.Substring'ı çağırmaya çalışıyor. Ne yazık ki, bu, "=" sembolü olmadığında -1 değerini veren String.IndexOf kullanılarak tanımlanır. İlgili kaynak kodu: https://github.com/fsharp/FSharp.Data/blob/master/src/Net/Http.fs#L674 ve yorum: '.NET bazı çerezleri ayrıştırmakta zorlanıyor. Http: // stackoverflow.com/a/22098131/165633’e bakın – Ringil

cevap

0

Ben kodu çalıştırdığınızda En fazla bu tam StackTrace geçerli:

https://github.com/fsharp/FSharp.Data/issues/904

<: Sana yazık ki bu tanımlama bilgisi işlemeyi koduna ilişkin bir hata tökezledi düşünüyorum

System.ArgumentOutOfRangeException: Length cannot be less than zero. 
Parameter name: length 
    at System.String.Substring(Int32 startIndex, Int32 length) 
    at [email protected](Int32 i, String cookiePart) in C:\Git\FSharp.Data\src\Net\Http.fs:line 675 
    at Microsoft.FSharp.Collections.ArrayModule.IterateIndexed[T](FSharpFunc`2 action, T[] array) 
    at FSharp.Data.HttpHelpers.getAllCookiesFromHeader(String header, Uri responseUri, CookieContainer cookieContainer) in C:\Git\FSharp.Data\src\Net\Http.fs:line 671 
    at <StartupCode$FSharp-Data>[email protected](WebResponse _arg2) in C:\Git\FSharp.Data\src\Net\Http.fs:line 803 
    at [email protected](a a) 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.FSharp.Control.AsyncBuilderImpl.commit[a](Result`1 res) 
    at Microsoft.FSharp.Control.CancellationTokenOps.RunSynchronously[a](CancellationToken token, FSharpAsync`1 computation, FSharpOption`1 timeout) 
> at Microsoft.FSharp.Control.FSharpAsync.RunSynchronously[T](FSharpAsync`1 computation, FSharpOption`1 timeout, FSharpOption`1 cancellationToken) 
    at <StartupCode$FSI_0004>[email protected]() in C:\Users\helgeu.COMPODEAL\AppData\Local\Temp\~vs2B9.fsx:line 8 
Stopped due to error 

rant >

Bu koda bakmaya çalıştım ama başım ağrıyor Kötülükten kesmek ve C# 'de çerezleri işlemek ve sonra F #' a kötü bir şekilde çevrildi.

</rant >

burada belki daha iyi bir seçenek olabileceğini github davaya bilgi ekleyerek düşünün.