2

Nokogiri を使用して XML フィードを取り込みましたが、問題なく動作しています。取得する必要がある新しいフィードが追加されましたが、一度に読み込まれません。ブラウザーで xml フィードにアクセスすると、最初の一連のデータが読み込まれ、その後すぐにさらにデータが読み込まれることがわかります。Nokogiri を使用すると、データの初期セットを取得するだけです。curl を使用してフィードをキャプチャしようとしたところ、同じ結果が得られました。

XML フィードからすべてのデータを取得するにはどうすればよいですか? Nokogiri に渡すことができるオプションや、curl に設定できるフラグはありますか? Nokogiri のドキュメントと curl の man ページを見ましたが、わかりません。

データを(のこぎりまたはカールを使用して)下に引っ張ると、次のようになります(ただし、2つ以上のアイテムがあります)。

<?xml version="1.0" encoding="UTF-8"?>
<item-syndication version="5">
  <item id="1">
    <more-data >lorem ipsum</more-data>
  </item>
  <item id="2">
    <more-data >lorem ipsum</more-data>
  </item>
</item-syndication>

ブラウザーで URL にアクセスすると、最初は上記のように見えますが、次のようにさらに多くのアイテムが読み込まれます (最終的に 4 つを超えるアイテムが表示されます)。

<?xml version="1.0" encoding="UTF-8"?>
<item-syndication version="5">
  <item id="1">
    <more-data >lorem ipsum</more-data>
  </item>
  <item id="2">
    <more-data >lorem ipsum</more-data>
  </item>
  <item id="3">
    <more-data >lorem ipsum</more-data>
  </item>
  <item id="4">
    <more-data >lorem ipsum</more-data>
  </item>
</item-syndication>

最初のリクエストのリクエスト ヘッダーとレスポンス ヘッダーは次のとおりです。 最初のリクエストのリクエスト ヘッダーとレスポンス ヘッダー

参考までに、favicon のリクエスト ヘッダーとレスポンス ヘッダーを次に示します。 ファビコンのリクエスト ヘッダーとレスポンス ヘッダー

4

2 に答える 2

1

ページが AJAX を使用して XML をロードしている可能性が非常に高いです。(Firebug を使用して XHR を取得し、新しい XML を追加するために使用する POST 要求を正確に確認できる場合は、より良いアイデアが得られる可能性があります)

残念なことに、Nokogiri と Mechanize (Nokogiri で構築された別の XML 解析/スクレイピング ツール) は Javascript をサポートしていないため、ページにプッシュされたデータを取得することはできません。ページをリロードせずにAJAXを介して(オプションである場合とそうでない場合があります)。

ただし、ループでは、たとえば 30 秒間、5 秒ごとにページをロードし、XML を元のスクレイプと比較して、重複が発生しないようにするオプションがあります。どのように行うかは完全にあなた次第ですが、値を REXML に保存し、新たにスクレイピングした値と比較することは、最悪の選択肢のようには思えません。

もう 1 つの方法は、Javascript を完全にサポートするブラウザー エミュレーターを使用することです。Watir と Selenium は私が知っている 2 つであり、ページを再読み込みして受信した変更を受け入れることを防ぐことができます (個人的にはどちらも使用していませんが、Mechanize を使用する私の作業のほとんどは Javascript を回避することができたためです)。ページを再取得するか、手で GET/POST を送信します)。これら 2 つの gem を使用することの欠点は、ブラウザー全体をエミュレートすることに伴うかさばることです。

Watir - http://rubygems.org/gems/watir

セレン - http://rubygems.org/gems/selenium-webdriver

于 2013-08-29T16:54:42.573 に答える
1

したがって、この質問に対する正しい答えは、間違った URL を使用していたことです。正しい URL を使用することで、ノコギリとカールで期待どおりの結果を得ることができました。

于 2013-08-29T18:42:52.947 に答える