0

私は次のHTMLを持っています:

<h3><strong>Adresse:</strong></h3>
    <p>
Hochschule Darmstadt<br>
TechnologieTransferCentrum<br>
D19, Raum 221, 222<br>
Schöfferstraße 10<br>
<b>64295 Darmstadt</b><p>
<h3>Kommunikationsdaten: </h3> 
<p>

ただし、タグ<p><br>タグは閉じていません。

住所情報を抽出するにはどうすればよいですか。

Hochschule Darmstadt
TechnologieTransferCentrum
D19, Raum 221, 222
Schöfferstraße 10
64295 Darmstadt
4

2 に答える 2

0

でドキュメントを解析したと仮定すると、次のようになりますdoc

puts doc.at('//h3[contains(strong, "Adresse:")]/following-sibling::p').text

次の出力が得られます。

Hochschule Darmstadt
TechnologieTransferCentrum
D19, Raum 221, 222
Schöfferstraße 10
64295 Darmstadt
于 2013-05-04T23:06:16.460 に答える
0

この基礎から始めて:

# encoding: UTF-8
require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<h3><strong>Adresse:</strong></h3>
    <p>
Hochschule Darmstadt<br>
TechnologieTransferCentrum<br>
D19, Raum 221, 222<br>
Schöfferstraße 10<br>
<b>64295 Darmstadt</b><p>
<h3>Kommunikationsdaten: </h3> 
<p>
EOT

puts doc.errors
puts doc.to_html

コードを実行すると、次のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<h3><strong>Adresse:</strong></h3>
    <p>
Hochschule Darmstadt<br>
TechnologieTransferCentrum<br>
D19, Raum 221, 222<br>
Schöfferstraße 10<br><b>64295 Darmstadt</b></p>
<p>
</p>
<h3>Kommunikationsdaten: </h3>
<p></p>
</body></html>

Nokogiri がタグ<html><body>タグを追加したことに注意してください。また、<p>タグを閉じて、 </p>. HTML をフラグメントとして解析し、代わりに使用してヘッダーを追加しないように指示できます。

Nokogiri::HTML::DocumentFragment.parse

生成するもの:

<h3><strong>Adresse:</strong></h3>
    <p>
Hochschule Darmstadt<br>
TechnologieTransferCentrum<br>
D19, Raum 221, 222<br>
Schöfferstraße 10<br><b>64295 Darmstadt</b></p><p>
</p><h3>Kommunikationsdaten: </h3>
<p></p>

HTML の修正はまだ行われていますが、それは渡された基本的な HTML です。いずれにせよ、結果の HTML は技術的に正しいものです。

問題のテキストの検索について: タグが 1 つしかない場合<p>、または最初のタグの場合:

doc.at('p').text
=> "\nHochschule Darmstadt\nTechnologieTransferCentrum\nD19, Raum 221, 222\nSchöfferstraße 1064295 Darmstadt"

または:

doc.at('h3').next_sibling.next_sibling.text
=> "\nHochschule Darmstadt\nTechnologieTransferCentrum\nD19, Raum 221, 222\nSchöfferstraße 1064295 Darmstadt"

2 つのnext_sibling方法が必要です。1 つ目は、ノードの末尾の直後にあるテキスト ノードを見つけ<h3>ます。

doc.at('h3').next_sibling
=> #<Nokogiri::XML::Text:0x3fef59dedfb8 "\n    ">
于 2013-05-04T05:32:08.283 に答える