6

ドキュメントに従って、Python スクリプトから Scrapy を実行できますが、Scrapy の結果を取得できません。

これは私のスパイダーです:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from items import DmozItem

class DmozSpider(BaseSpider):
    name = "douban" 
    allowed_domains = ["example.com"]
    start_urls = [
        "http://www.example.com/group/xxx/discussion"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        rows = hxs.select("//table[@class='olt']/tr/td[@class='title']/a")
        items = []
        # print sites
        for row in rows:
            item = DmozItem()
            item["title"] = row.select('text()').extract()[0]
            item["link"] = row.select('@href').extract()[0]
            items.append(item)

        return items

最後の行に注目してください。次のコマンドを実行すると、返された解析結果を使用しようとします。

 scrapy crawl douban

端末は戻り結果を出力できます

しかし、Python スクリプトから返された結果を取得できません。ここに私のPythonスクリプトがあります:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log, signals
from spiders.dmoz_spider import DmozSpider
from scrapy.xlib.pydispatch import dispatcher

def stop_reactor():
    reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = DmozSpider(domain='www.douban.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg("------------>Running reactor")
result = reactor.run()
print result
log.msg("------------>Running stoped")

で結果を取得しようとしましたが、reactor.run()何も返されません。

どうすれば結果を得ることができますか?

4

3 に答える 3

8

デフォルトのログ レベルが に設定されているため、ターミナルは結果を出力しますDEBUG

スクリプトからスパイダーを実行して を呼び出すlog.start()場合、デフォルトのログ レベルは に設定されINFOます。

置き換えるだけです:

log.start()

log.start(loglevel=log.DEBUG)

更新:

結果を文字列として取得するには、すべてをファイルに記録してから読み取ることができます。次に例を示します。

log.start(logfile="results.log", loglevel=log.DEBUG, crawler=crawler, logstdout=False)

reactor.run()

with open("results.log", "r") as f:
    result = f.read()
print result

それが役立つことを願っています。

于 2013-07-10T07:16:02.863 に答える
0

私の場合、スクリプトファイルをスクレイピープロジェクトレベルに配置しました。たとえば、スクレイピープロジェクト/スクレイピープロジェクト/スパイダーの場合、スクレイピープロジェクト/myscript.pyに配置しました

于 2014-03-14T09:05:36.560 に答える