在 Nokogiri 中使用 Xpath 转义下划线
Escaping Underscore with Xpath in Nokogiri
我很困惑。鉴于此 HTML:
<div class="v-product">
<div class="v-product__inner">
<a href="https://www.xxxxx.com/>
</div>
<div class="v-product__details"> Description </div>
</div>
我想使用 XPath 和 Nokogiri 获取节点。
我试过了
parse_page.xpath("//v-product__details")
但它不起作用,因为节点为空。
如何在 XPath 中转义双下划线?
问题不在于下划线,而在于您的 XPath。
//v-product__details
正在寻找像 <v-product__details>
这样的标签,而不是 class
属性中带有 v-product__details
的标签。
我会用 CSS 代替:
parse_page.css('.v-product__details')
但是如果你必须使用 XPath:
parse_page.xpath('//div[contains(@class, "v-product__inner")]')
parse_page.xpath('//*[contains(@class, "v-product__inner")]')
parse_page.xpath('//div[@class="v-product__inner"]')
parse_page.xpath('//*[@class="v-product__inner"]')
...
如果 parse_page
来自 Nokogiri::HTML.fragment(...)
,那么您需要在 XPath 表达式中添加前导 .
:
parse_page.xpath('.//div[contains(@class, "v-product__inner")]')
...
但实际上,如果可能的话,我会选择 CSS。
我很困惑。鉴于此 HTML:
<div class="v-product">
<div class="v-product__inner">
<a href="https://www.xxxxx.com/>
</div>
<div class="v-product__details"> Description </div>
</div>
我想使用 XPath 和 Nokogiri 获取节点。
我试过了
parse_page.xpath("//v-product__details")
但它不起作用,因为节点为空。
如何在 XPath 中转义双下划线?
问题不在于下划线,而在于您的 XPath。
//v-product__details
正在寻找像 <v-product__details>
这样的标签,而不是 class
属性中带有 v-product__details
的标签。
我会用 CSS 代替:
parse_page.css('.v-product__details')
但是如果你必须使用 XPath:
parse_page.xpath('//div[contains(@class, "v-product__inner")]')
parse_page.xpath('//*[contains(@class, "v-product__inner")]')
parse_page.xpath('//div[@class="v-product__inner"]')
parse_page.xpath('//*[@class="v-product__inner"]')
...
如果 parse_page
来自 Nokogiri::HTML.fragment(...)
,那么您需要在 XPath 表达式中添加前导 .
:
parse_page.xpath('.//div[contains(@class, "v-product__inner")]')
...
但实际上,如果可能的话,我会选择 CSS。