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

HTMLの解析にNOKOGIRIを使用しています。上記の場合、上記のhtmlコードが@textにあるとします。

@page_data = Nokogiri::HTML(@text)
@headings = @page_data.css('h3')
@desc = @page_data.css('p')

ただし、@ descでは、テキストのみが返され、「リンク1」、「リンク2」、「リンク3」のリンクは作成されません。

リンクがテキストの間にあるので、再度個別にリンクすることはできません。
この場合、「p」タグにリンクが含まれるテキストを作成するにはどうすればよいですか?

4

1 に答える 1

0

あなたの質問は、あなたが何を達成しようとしているのかについてあまり明確ではありません。これで…

この場合、「p」タグにリンクが含まれるテキストを作成するにはどうすればよいですか?

...つまり、 「各タグのHTMLコンテンツを取得するにはどうすればよいですか?」<p>その後、これはそれを行います:

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 に答える