我需要从网站检索一个值(可能会有所不同,我无法控制该网站)。我目前有一些有效的代码......但需要很长时间才能运行。我知道有一种大大改进的方法可以做到这一点,我只是不知道那是什么。
我已经考虑过几种替代方法,例如 Regex 和 HTMLAgilityPack(看起来很复杂,而且可能有点矫枉过正?),但如果没有尝试每种方法,我不确定哪种方法最有效。我相信还有更多的可能性。
问题甚至可能与我如何检索页面而不是我如何处理它有关。
Dim GETURL As WebRequest
GETURL = WebRequest.Create("http://www.example.com")
Dim objStream As Stream = GETURL.GetResponse.GetResponseStream()
Dim objReader As New StreamReader(objStream)
Dim sLine As String = ""
Dim a As Integer = 0
Dim result As String = ""
Do While Not sLine Is Nothing
a += 1
sLine = objReader.ReadLine
If Not sLine Is Nothing Then
result += sLine
End If
Loop
Dim startTag as string ="<some html tag>"
Dim endTag as string ="<closing tag>"
Dim firstIndex As Integer = result.IndexOf(startTag) + startTag.Length
result = result.Substring(firstIndex, result.Length - firstIndex)
Dim RequiredVal As String = result.Substring(0, result.IndexOf(endTag))
请注意,我确实意识到这段代码是多么低效,但与其尝试加载不同的排列(并且可能仍然有相当低效的代码),我想我会先征求一些专家的建议 :-)
更新:
由于我没有得到任何回应(也许我的问题有点太模糊了?)我一直在努力提高自己的效率。通过使用 WebCient.DownloadString(),我设法将运行时间减少了约 50%。这很好,但我怀疑我可以改进从页面中提取数据。请参阅下面的更新代码:
Dim client As New WebClient()
Dim result As String = client.DownloadString("http://www.example.com")
Dim startTag as string ="<some html tag>"
Dim endTag as string ="<closing tag>"
Dim firstIndex As Integer = result.IndexOf(startTag) + startTag.Length
result = result.Substring(firstIndex, result.Length - firstIndex)
Dim RequiredVal As String = result.Substring(0, result.IndexOf(endTag))
任何建议将不胜感激。