Опять спасибо Джейсону. HTMLAgilityPack добился цели.
Чтобы помочь другим, я опубликую несколько фрагментов кода, которые мне показались полезными (поскольку документация по продукту немногочисленна).
1) В вашем приложении ASP.NET скопируйте HtmlAgilityPack.dll и HtmlAgilityPack.XML в папку BIN.
Убедитесь, что он зарегистрирован, щелкнув правой кнопкой мыши верхнюю строку в обозревателе решений и просмотрев «Страницы свойств». Если HtmlAgilityPack отсутствует в ваших ссылках, нажмите [AddDownArrow], Добавить ссылку, Корзина, HtmlAgilityPack, OK.
2) ЗАПИСАТЬ ВЕБ-СТРАНИЦУ И ПРЕОБРАЗОВАТЬ В HTML DOC:
Адаптировано из превосходного примера асинхронной задачи EggheadCafe :
Public Function OnBegin(...)
vRequest = WebRequest.Create("http://www.stackoverflow.com")
Return vRequest.BeginGetResponse(cb, extraData)
End Function
Public Sub OnEnd(...)
Private vPage_Text As String = ""
Private vPage_Doc As New HtmlAgilityPack.HtmlDocument
Using response As WebResponse = vRequest.EndGetResponse(ar)
Using reader As StreamReader = New StreamReader(response.GetResponseStream())
vPage_Text = reader.ReadToEnd()
vPage_Doc.LoadHtml(vPage_Text)
End Using
End Using
End Sub
3) Извлечь весь HTML-документ:
vText = vPage_Doc.DocumentNode.OuterHtml
4) Изучите каждую ссылку в документе и соберите URL-адреса:
For Each vLinkNode As HtmlAgilityPack.HtmlNode In vPage_Doc.DocumentNode.SelectNodes(".//a")
vLinkList = vLinkList & vLinkNode.GetAttributeValue("href", "") & vbCrLf
Next
5) ИЗУЧИТЕ ВСЕ С CSS class = "item_class" И СОБИРАЙТЕ ТЕКСТ:
For Each vDivNode As HtmlAgilityPack.HtmlNode In vPage_Doc.DocumentNode.SelectNodes(".//div[@class='item_class']")
vPageText = vPageText & vDivNode.InnerText & vbCrLf
Next
6) Извлечь название и описание документа:
Dim vTitleNode As HtmlAgilityPack.HtmlNode = vPage_Doc.DocumentNode.SelectSingleNode(".//title")
vTitleText = vTitleNode.InnerText
Dim vDescriptionNode As HtmlAgilityPack.HtmlNode = vPage_Doc.DocumentNode.SelectSingleNode(".//meta[@name='description']")
vDescriptionText = vDescriptionNode.InnerText
Или название в теле документа:
vBodyTitle = vPage_Doc.DocumentNode.SelectSingleNode(".//h1")
7) ВЫДЕЛИТЬ ЭЛЕМЕНТ ПО ЕГО ИДЕНТИФИКАТОРУ:
Dim vBigImageNode As HtmlAgilityPack.HtmlNode = vPage_Doc.GetElementbyId("BigImage")
vImage_URL = vBigImageNode.GetAttributeValue("src", "")
vImage_Height = vBigImageNode.GetAttributeValue("height", "")
vImage_Width = vBigImageNode.GetAttributeValue("width", "")
8) УДАЛИТЬ УЗЕЛ:
vMovieNode.SelectSingleNode(".//div[@class='viewer-reviews']").Remove()
Наконец, мне нужно было извлечь подраздел страницы, когда не было явных узлов или других «точек привязки». Хитрость заключается в том, чтобы идентифицировать все, что вы можете «найти» (например, тег или комментарий), которое можно использовать в качестве точки разделения в уже выбранном узле документа. Затем вставьте теги окончания и начала вставки, создав тем самым 2 отдельных подраздела внутри узла. Наконец, создайте новый документ HTML из отредактированного узла и выберите вновь определенный узел. (Если вы не поняли всего этого, просто следуйте коду.)
Итак, вот самый секретный, никогда прежде не выпущенный,
9) ВЫДЕЛИТЬ ЛЮБУЮ ЧАСТЬ ДОКУМЕНТА:
Dim vNewDoc As New HtmlAgilityPack.HtmlDocument
vNewDoc.LoadHtml(vOldDivNode.OuterHtml.Substring(0, vOldDivNode.OuterHtml.IndexOf("<!-- comment") - 1) & _
"</div><div class=""my_new_node"">" & _
vOldDivNode.OuterHtml.Substring(vOldDivNode.OuterHtml.IndexOf("<!-- comment") - 1))
Dim vNewDivNode = vNewDoc.SelectSingleNode(".//div[@class='my_new_node']")
Dim vHaHaICapturedYou As String = vNewDivNode.InnerText
Конечно, теперь, когда я сказал тебе, мне придется тебя убить.
Спасибо всем авторам Stack Overflow за всю помощь, которую вы мне оказали!