我的HTML代码是这样的:
<h3>Head1</h3>
<p>text before link<a href="http://www.google.com" title="http://www.google.com" target="_blank">Link 1</a>text after link</p>
<h3>Head2</h3>
<p>text before link<a href="http://www.google.com" title="http://www.google.com" target="_blank">Link 2</a>text after link</p>
<h3>Head3</h3>
<p>text before link<a href="http://www.google.com" title="http://www.google.com" target="_blank">Link 3</a>text after link</p>
我正在使用NOKOGIRI进行HTML解析。在上述情况下,假设上面的 html 代码是@text
@page_data = Nokogiri::HTML(@text)
@headings = @page_data.css('h3')
@desc = @page_data.css('p')
但在@desc中,它只返回文本,不会为"链接1"、"链接2"、"链接3"创建链接。
因为链接存在于文本之间,所以我不能再单独链接了。
在这种情况下,我如何实现带有"p"标签链接的文本?
你的问题不是很清楚你想完成什么。如果这样...
在这种情况下,如何在"p"标签中实现带有链接的文本?
。你的意思是,"我怎样才能获取每个<p>
标签的HTML内容?"那么这将做到这一点:
require "nokogiri"
frag = Nokogiri::HTML.fragment(my_html)
frag.css('h3').each do |header|
puts header.text
para = header.next_element
puts para.inner_html
end
#=> Head1
#=> text before link<a href="http://www.google.com" title="http://www.google.com" target="_blank">Link 1</a>text after link
#=> Head2
#=> text before link<a href="http://www.google.com" title="http://www.google.com" target="_blank">Link 2</a>text after link
#=> Head3
#=> text before link<a href="http://www.google.com" title="http://www.google.com" target="_blank">Link 3</a>text after link
相反,如果您的意思是"我如何只获取每个段落中的锚点文本?"那么您可以这样做:
frag.css('h3').each do |header|
anchor = header.next_element.at_css('a')
puts "#{header.text}: #{anchor.text}"
end
#=> Head1: Link 1
#=> Head2: Link 2
#=> Head3: Link 3
。或者你可以这样做:
frag.xpath('.//p/a').each do |anchor|
puts anchor.text
end
#=> Link 1
#=> Link 2
#=> Link 3
如果这些都不是您想要的,那么请编辑您的问题以更清楚地解释您想要的最终结果。