HTML 테이블에서 데이터를 추출하는 방법은 무엇입니까?

html-agility-pack vb.net

문제

최근 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

보시다시피 www.reuters.com/finance/stocks/overview?symbol=GOOG 에서 HTML로 작업하고 있습니다.

이 페이지에서 베타 값을 추출하려고합니다. 이 값은 현재 1.04입니다.

직접 실행 창 위의 코드를 실행하면이 작업이 100 번 반복됨을 알 수 있습니다.

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

나는 단지 첫 번째 숫자 (1.04)가 반환되기를 원한다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떤 제안?

수락 된 답변

쿠키와 프록시를 사용해야합니다. 아래는 나를 위해 잘 작동합니다. 네 생각을 말해봐:

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



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.