Nokogiri : 无法访问带有"a"标签链接的"p"标签文本



我的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

如果这些都不是您想要的,那么请编辑您的问题以更清楚地解释您想要的最终结果。

相关内容

  • 没有找到相关文章

最新更新