动态清理目标CSS选择器

时间:2014-12-07 07:00:05

标签: ruby-on-rails ruby nokogiri

我正在使用Ruby和Nokogiri来获取CSS选择器所针对的某些标签内的内容。

但是,我遇到的问题是目标标记在CSS ID名称的末尾附加了唯一的产品ID。

示例:

a#exampleIdNameB000AQ40M8B00JYWUHO4

在我的脚本中,我试图抓取多个产品的这些信息,因此这个ID每次都会改变并且正在破坏。

具体来说,我正在获取标签内的内容:

remove_html_tags(doc.css(html).to_s.strip)

它正在搜索的HTML是a#exampleIdName

有没有办法告诉Nokogiri将文档中的a#exampleIdNameB000AQ40M8B00JYWUHO4视为:{/ p>

a#examplIdName

所以我可以匹配所有产品页面?

2 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了这个问题,但您可以按属性前缀搜索:

require "nokogiri"

html = "<div id=foo123>A</div> <div id=foo456>B</div> <div id=bar123>C</div>"
doc = Nokogiri::HTML(html)
p doc.css("div[id^=foo]").map(&:text)  # ["A", "B"]

答案 1 :(得分:0)

解决这个问题的正确方法是使用类而不是ID。如果这些元素没有公共类,则可以使用正则表达式去除ID属性中不需要的部分,然后再通过nokogiri进行解析。

使用正则表达式将a#exampleIdNameB000AQ40M8B00JYWUHO4替换为文档中的a#examplIdName