首页 > 解决方案 > HtmlAgilitypack div 节点 - 如何首先查询 div 内部的内容,然后基于该节点进行解析

问题描述

我会解析我的供应商网站以获取当前商品价格。我正在使用 vb.net 和我在 Visual Studio 2015 中编写的 Windows 桌面应用程序

一位供应商最近改变了他们显示价格的方式 项目价格在一个共同的主 div 中。但价格可以在表格或简单的 div 内

我可以轻松地从表格或 div 中抓取价格,但我需要先选择价格的显示方式,然后将其发送到正确的解析代码

请注意,在下面的 html 中,这是两种定价方案的主要 div

<div class="price" id="itemPrice12345">
  .. a table or a simple price div are here.
</div>

这是 div 包含表格时的外观

<div class="price" id="itemPrice12345">
<table class="bglt"><tbody>
<tr>
<td class="texttable" nowrap="">1 to 9</td>
<td class="texttable">$9.93</td>
</tr></tbody></table>
</div> 

我使用此节点选择代码从表格中解析价格

Dim tables As HtmlAgilityPack.HtmlNodeCollection
tables = WebPageDocument.DocumentNode.SelectNodes("//*[contains(@id,'itemPrice')]/div[1]/table")

然后我遍历表格行“./tr”和表格列“./td”来挑选价格


没有表格的相同主 div 看起来像这样

<div class="price" id="itemPrice12345">
<div class="price firstprice">$3.50</div>   
</div> 

我使用这个节点选择代码从这个简单的 div 中解析出价格

Dim PriceNode As HtmlAgilityPack.HtmlNodeCollection
PriceNode = WebPageDocument.DocumentNode.SelectNodes("//*[contains(@id,'itemPrice')]/div[1]/div")
ItemPrice = PriceNode(0).InnerText

我的问题是,如何确定主要项目价格 div 是否包含表格或简单的价格 div?一旦我知道了这一点,我就可以将解析发送到正确的代码部分。所以我想我需要先查询主 div 里面有什么,但我不知道该怎么做?谢谢你的帮助

标签: vb.nethtml-agility-pack

解决方案


尝试先选择一个节点,看看它是否有问题:

Dim _itemPriceSelector As String = "//*[contains(@id,'itemPrice')]/div[1]"
Dim _divSelector As String = _itemPriceSelector & "/div"
Dim _tableSelector As String = _itemPriceSelector & "/table"

If doesNodeExist(_tableSelector) Then

    Dim tables As HtmlAgilityPack.HtmlNodeCollection
    tables = WebPageDocument.DocumentNode.SelectNodes(_tableSelector )

ElseIf doesNodeExist(_divSelector) Then

    Dim PriceNode As HtmlAgilityPack.HtmlNodeCollection
    PriceNode = WebPageDocument.DocumentNode.SelectNodes(_divSelector)
    ItemPrice = PriceNode(0).InnerText

End If

Private Function doesNodeExist(selector) As Boolean
    If IsNothing(WebPageDocument.DocumentNode.SelectSingleNode(selector)) Then
        Return False
    Else
        Return True
    End If
End Function

推荐阅读