0

私がスクレイピングしているものの出力は、次のようになります。

<li><img class="static" src="pic.jpg"><span id="dynamic1" class="the text">I like turtles</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic2" class="the text">I like bears</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic3" class="the text">I like ruby</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic4" class="the text">I like oranges</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic5" class="the text">I like keyboards</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic6" class="the text">I like movies</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic7" class="the text">I like Android</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic8" class="the text">I like Mac</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic9" class="the text">I like music</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic10" class="the text">I like boats</span></li>

これは100行くらいあり、毎回スパンクラスが異なり、「カメが好き」の部分も毎回異なります。

理想的には、各行の「I like turtles」の部分のみが必要です。これを取得する方法はありますか?

例 10 行

4

2 に答える 2

2

次のような大量の HTML になってしまった場合:

<ul>
    <li><img ...><span ...>I want this text</span></li>
    <li><img ...><span ...>I want this text</span></li>
    ...
</ul>

次に、 を抽出し、その中のタグを無視して、<li>それぞれからテキストを抽出できます。<li>

texts_you_want = doc.css('li').map(&:text)

これは s内<img>の要素と要素を無視し、たまたまどのクラスを持っているかを気にする必要はありません。<span><li>

于 2012-06-02T02:42:18.283 に答える
2

の答えからの「慣習」に従ってdoc.css()ください。

Nokogiri を使用するとNokogiri::HTML、整形式の XML であるかのように、結果に対して XPath を実行できます。

text_you_want = doc.xpath("//li/span").map(&:text)

ps//ルート/ではなく私が行った理由は、スクレイピングの残り物を解析すると、Nokogiri::HTMLそれがラップされる<html><body>ためです。あなたのフラグメントにXPathを書くの/html/body/li/spanはちょっと厄介に見えます:)

于 2012-06-02T02:52:25.070 に答える