VB 2010:如何获取特定类别网页中特定范围的内容?

时间:2014-04-17 20:10:44

标签: html vb.net winforms web-scraping html-parsing

让我解释一下:我想制作一个使用在线费率的货币转换器表格,以便它是最新的。我计划使用内置货币转换功能的Google,输入:

[任何货币符号] [任何数字金额] + + [任何货币符号]


我知道如何格式化我要搜索的网址,以及我希望的范围(其文本)在哪个类我只是不知道如何以编程方式取出结果并以我的形式使用

以下是“£1 in $”转换中适用的 HTML 代码:

<div class="vk_ans vk_bk curtgt" style="padding-bottom: 4px">
<span style="word-break:break-all">1.68</span>
<span>US Dollar</span></div>

该课程被称为:

  

vk_ans vk_bk curtgt

范围文本是班级中的第一个(包含“1.68”的文本)

顺便说一下,我完全理解为此目的有更易于使用的API网站,但我想使用Google,因为:

  1. 永远都是
  2. 这是我学习如何抓取网页特定部分的好机会。

1 个答案:

答案 0 :(得分:0)

我个人使用http://www.nuget.org/packages/ScrapySharp/2.2.63进行html-scraping,它允许使用CSS3选择器来很好地抓住你需要的东西。

在你的情况下,它就像这样简单:

Dim doc as HtmlAgilityPack.HtmlDocument = new HtmlAgilityPack.HtmlDocument()
doc.LoadHtml(GetRawHtml(theUrl))
Dim body as HtmlNode= doc.DocumentNode.SelectSingleNode("//body")
Dim yourSpan as HtmlNode = body.CssSelect(".vk_ans.vk_bk.curtgt").First()
dim yourValue as Double = Double.Parse(yourSpan.InnerText)


 Function GetRawHtml(url As String) As String
    Dim html As String = String.Empty
    Dim request As WebRequest = WebRequest.Create(url)

    Try
        Using response As WebResponse = request.GetResponse()
            Using data As Stream = response.GetResponseStream()
                Using sr As New StreamReader(data)
                    html = sr.ReadToEnd()
                End Using
            End Using
        End Using
    Catch e As Exception
        yourLogger.Error("WebRequest failed at url `{0}`. Error: {1}", url, e.ToString())
    End Try

    Return html
End Function

此外,如果请求很慢,您可能希望将代理属性更改为空,请参阅此处:HttpWebRequest is extremely slow!