3

最近 HtmlAgilityPack をダウンロードしましたが、その使用方法に関する実際の説明は見つかりませんでした。さまざまなディスカッション ボードの投稿やその他の情報源に基づいて、いくつかのコードをつなぎ合わせようとしました。これが私がこれまでに持っているものです:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim document As New HtmlAgilityPack.HtmlDocument
    document.LoadHtml("www.reuters.com/finance/stocks/overview?symbol=GOOG")

    Dim tabletag = document.DocumentNode.SelectSingleNode("//table[@class='data']/tr[1]/td[2]")
End Sub

ご覧のとおり、私は の HTML を使用していますwww.reuters.com/finance/stocks/overview?symbol=GOOG

このページからベータ値を抽出しようとしています。この値は現在 1.04 です。

上記のコードを実行すると、即時ウィンドウにこれが 100 回繰り返されます。

1.04
$243,156.41
328.59
--
--
Trading Report for (GOOG). A detailed report, including free correlated market analysis, and updates.
ValuEngine Detailed Valuation Report for GOOG
GOOGLE INC CL A (GOOG)  12-months forecast
GOOGLE INC CL A (GOOG)  2-weeks forecast
Google Inc: Business description, financial summary, 3yr and interim financials, key statistics/ratios and historical ratio analysis.

最初の数値 (1.04) だけを返したい。私は何を間違っていますか?助言がありますか?

4

1 に答える 1

2

Cookie とプロキシを使用する必要があります。以下は私にとって素晴らしい作品です。あなたの考えを聞かせてください:

Imports System.Net
Imports System.Web

Public Class Form1

    Public cookies As New CookieContainer

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


        Dim wreq As HttpWebRequest = WebRequest.Create("http://www.reuters.com/finance/stocks/overview?symbol=GOOG")

        wreq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5"

        wreq.Method = "get"

        Dim prox As IWebProxy = wreq.Proxy

        prox.Credentials = CredentialCache.DefaultCredentials


        Dim document As New HtmlAgilityPack.HtmlDocument
        Dim web As New HtmlAgilityPack.HtmlWeb

        web.UseCookies = True
        web.PreRequest = New HtmlAgilityPack.HtmlWeb.PreRequestHandler(AddressOf onPreReq)

        wreq.CookieContainer = cookies

        Dim res As HttpWebResponse = wreq.GetResponse()


        document.Load(res.GetResponseStream, True)

        'just for testing:
        '   Dim tabletag = document.DocumentNode.SelectNodes("//table")
        '  MsgBox(tabletag.Nodes.Count.ToString)

        'returns your field
        Dim tabletag2 = document.DocumentNode.SelectSingleNode("//td[@class='data']")
        MsgBox(tabletag2.InnerText)

    End Sub

    Private Function onPreReq(req As HttpWebRequest)

        req.CookieContainer = cookies
        Return True

    End Function
End Class
于 2013-01-14T19:50:07.807 に答える