我正在使用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
所以我可以匹配所有产品页面?
答案 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
。