-1

我的 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 中,它只返回文本,它不会为“Link 1”、“Link 2”、“Link 3”创建链接。

因为链接存在于文本之间,所以我不能再次单独链接它。
在这种情况下,如何在“p”标签中实现带有链接的文本?

4

1 回答 1

0

您的问题对您要完成的工作不是很清楚。如果以此...

在这种情况下,如何在“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

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

于 2012-04-18T16:47:19.180 回答