1

Web ページからデータをスクレイピングする Scrapy プロジェクトを作成することができましscrapy crawl dmoz -o items.json -t jsonた。コマンド ラインでそれを呼び出すと、スクレイピングされたデータが JSON ファイルに正常に出力されます。

次に、その JSON ファイルを取得してロードし、データの編成方法を変更して (デフォルトの編成方法が気に入らなかったため)、別の JSON ファイルとして出力する別のスクリプトを作成しました。次に、Django のmanage.py loaddata fixture.jsonコマンドを使用して、2 番目のファイルの内容を Django データベースに読み込みます。

さて、これを 3 つの別々のステップで行うことで建物から笑われることになると感じていますが、すべてを 1 つのスクリプトにまとめる方法がよくわかりません。まず第一に、Scrapy プロジェクトで自分のデータを思い通りに出力させることができないというのは、本当にばかげているように思えます。Feed exportsしかし、データを出力する「デフォルト」の方法を変更するコードをどこに配置すればよいでしょうか? それは私のpipelines.pyファイルに入るだけですか?

次に、Python スクリプト内からスクレイパーを呼び出して、結果の JSON フィクスチャをデータベースにロードしたいと考えています。それは次のようなものを置くのと同じくらい簡単ですか:

from twisted.internet import reactor  
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log
from testspiders.spiders.followall import FollowAllSpider

spider = FollowAllSpider(domain='scrapinghub.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()

スクリプトの先頭に、次のようなものを続けます。

from django.something.manage import loaddata

loaddata('/path/to/fixture.json')

? 最後に、このスクリプトが適切に動作するために、私の Django プロジェクトと Scrapy プロジェクトの両方に関連して、このスクリプトが存在しなければならない特定の場所はありますか?

4

1 に答える 1

1
  1. まさにその通りです。必要に応じてアイテムデータを出力するようにpipelines.pyでカスタムアイテムパイプラインを定義してから、パイプラインクラスをsettings.pyに追加します。断片的なドキュメントには、役立つ可能性のあるJSONWriterPipelineの例があります。
  2. さて、あなたの例のスクリプトは、ごちゃごちゃしたドキュメントから取られたものであることに基づいて、それは機能するはずです。試しましたか?
  3. 必要なすべてのインポートが機能する限り、場所は重要ではありません。これをテストするには、Pythonインタープリターを目的の場所で起動し、すべてのインポートを1つずつチェックします。それらがすべて正しく実行されれば、スクリプトは問題ないはずです。

何か問題が発生した場合は、関連するコードと何を試したかを記載した別の質問をここに投稿してください。誰かが喜んで手伝ってくれると確信しています。:)

于 2013-02-02T19:52:10.523 に答える