[英]VB.NET download html code tables
我是vb.net的新手,我為自己創建的軟件存在很大的問題。
1.背景:
我的軟件中有代碼,可以將網頁的源代碼下載到.txt文件中,並過濾掉所尋找的信息。 對於普通的HTML代碼,它可以正常工作。
2.問題:
問題是當我無法在HTML代碼中定位特定參數時,因為它們太模糊了。
3.范例:
我可以下載這種獨特的HTML代碼,並將變量(在本例中為Brown)傳遞給軟件中的Strings,因為它位於同一行代碼中,因此具有唯一性:
<div class="Performer_DataLabel">Hair Color:</div> Brown</div>
但是我想知道如何搜索特定的表及其行和單元格(例如下面的代碼,其中顯示了我感興趣的1行和2個單元格的代碼):
1. <tr>
2. <td class="paramname">
3. <b>Hair Color:</b>
4. </td>
5. <td class="paramvalue">
6. Brown
7. </td>
8. </tr>
事實是,您可以看到,“頭發顏色:”可以是任何變量,例如“眼睛顏色”或“高度”,而“棕色”可以是該問題的任何答案。 這些表,行或單元格中沒有足夠的唯一代碼來定位這些代碼行,特別是當它們寫在一行上時。
4.我想要:
為了能夠像上述示例一樣在HTML代碼表中搜索和定位“頭發顏色”,並在其相鄰單元格中搜索/定位其答案(在這種情況下為棕色),並將其傳遞給String變量(我將永遠知道正在尋找“頭發顏色”,但我永遠不會事先知道頭發顏色問題的答案,而答案變量正是我想要的答案。
5.結論:
我可以使用哪些VB.NET代碼:
1)搜索/定位包含諸如“頭發顏色”或“眼睛顏色”之類的單詞的HTML代碼表。
2)搜索/定位他們的答案變量,而不管它們是什么。 (某些問題可能會有很長的答案,因此現在無法選擇IF或SELECT CASE語句來進行預測/比較)
3)將答案傳遞到我的軟件中的字符串。
6.注意
無論完整源代碼有幾百行,問題(頭發顏色)始終位於表行(第3行)的同一行。
答案也總是在表格行的同一行(第6行)上。
但是,問題行本身並不總是位於表的同一位置。
您可能想利用HTML敏捷包 ,解析HTML(即使無效)也非常有用。 您需要下載它,並將其添加到項目的引用中,然后在代碼文件的開頭添加Imports HtmlAgilityPack
。 下面是解決您的問題的代碼:
Imports HtmlAgilityPack
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim document As New HtmlAgilityPack.HtmlDocument, strAnswer As String
document.Load("C:\tmp\1.html")
For Each td As HtmlAgilityPack.HtmlNode In document.DocumentNode.Descendants("td")
If td.InnerText.IndexOf("Hair Color") <> -1 Then
strAnswer = next_td(td).InnerText
MsgBox(strAnswer)
Exit For
End If
Next
End Sub
Private Function next_td(td As HtmlNode) As HtmlNode
Try
If td.NextSibling.Name = "td" Then
Return td.NextSibling
Else
Return next_td(td.NextSibling)
End If
Catch
Throw New Exception("Last <td> in document reached")
End Try
End Function
End Class
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.