pythonスクリプトでscrapy
を実行しています
def setup_crawler(domain):
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = ArgosSpider(domain=domain)
settings = get_project_settings()
crawler = Crawler(settings)
crawler.configure()
crawler.crawl(spider)
crawler.start()
reactor.run()
それは正常に実行されて停止しますが、結果はどこにありますか?結果をjson形式で取得したいのですが、どうすればよいですか?
result = responseInJSON
コマンドを使用するように
scrapy crawl argos -o result.json -t json
FEED_FORMAT
および FEED_URI
設定を手動で設定する必要があります:
settings.overrides['FEED_FORMAT'] = 'json'
settings.overrides['FEED_URI'] = 'result.json'
結果を変数に取得したい場合は、項目をリストに収集する Pipeline
クラスを定義できます。 spider_closed
シグナルハンドラーを使用して結果を表示します。
import json
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy.utils.project import get_project_settings
class MyPipeline(object):
def process_item(self, item, spider):
results.append(dict(item))
results = []
def spider_closed(spider):
print results
# set up spider
spider = TestSpider(domain='mydomain.org')
# set up settings
settings = get_project_settings()
settings.overrides['ITEM_PIPELINES'] = {'__main__.MyPipeline': 1}
# set up crawler
crawler = Crawler(settings)
crawler.signals.connect(spider_closed, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
# start crawling
crawler.start()
log.start()
reactor.run()
参考までに、Scrapy コマンドライン引数を解析する を見てください。
以下も参照してください Pythonの同じプロセス内でstdoutをキャプチャする 。
以下の基本的なScrapy APIチュートリアルコードを使用して、FEED_FORMAT
とFEED_URI
をCrawlerProcess
コンストラクターに追加するだけでうまく機能しました。
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'FEED_FORMAT': 'json',
'FEED_URI': 'result.json'
})
かんたん!
from scrapy import cmdline
cmdline.execute("scrapy crawl argos -o result.json -t json".split())
scrapy.cfg
を置く場所にそのスクリプトを置きます