vb.net - 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 里面有什么,但我不知道该怎么做?谢谢你的帮助
解决方案
尝试先选择一个节点,看看它是否有问题:
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
推荐阅读
- java - Sqlite 中是否有特定的有效表名
- php - 使用 $stmt->get_result()->fetch_assoc() 时出现 PHP 错误(500 内部服务器错误);
- django - Github webhook 向我的 django 应用返回 404
- python - 关于 lambda 的另一个问题,“k”在这里是什么意思?
- pandas - 熊猫索引的时间范围
- javascript - 使用循环和语句进行数组排序
- tensorflow - 您如何获得 keras 中单个类类型的准确性?
- android - 当任何视图的大小发生变化或 EditText 获得焦点时,BottomSheetDialogFragment 会跳转到状态栏的顶部
- javascript - openlayers 动态图像大小
- nginx - 怎么把一个文件给手机,另一个给电脑?