0

ドメインのすべての Web ページのリンクを取得するスパイダーの作成に成功しました。

同じことをしたいのですが、ホストするドメインと同じ数のドメインに対して、監視するドメインの引数としてスパイダーを追加するだけで、スパイダーを使用することを好みます。

ここのドキュメントでは、コンストラクターを明示的に定義し、パラメーターを追加してから、scrapy crawl myspider コマンドでスパイダーを起動する必要があると説明しています。

これが私のコードです:

class MySpider(BaseSpider):
    name= 'spider'

    def __init__(self, domain='some_domain.net'):
        self.domain = domain
        self.allowed_domains = [self.domain]
        self.start_urls = [ 'http://'+self.domain ]

    def parse(self, response):
        hxs = HtmlPathSelector(response)
        for url in hxs.select('//a/@href').extract():
            if not url.startswith('http://'):
                url= URL + url 
            print url
        yield Request(url, callback=self.parse)

ただし、打ち上げ

scrapy crawl spider -a domain='mydomain.my_extension'

戻り値:

ERROR: unable to find spider: spider

同じコードを起動するが、明示的なコンストラクターがないと、クロールでこれを行うことができないため、代わりに次のコマンドを使用する必要があります。

scrapy runspider /path/to/spider/spider.py

runspider ではパラメーターを使用できません。代わりにクロールを実行する必要があります。

スクレイピー クロール スパイダーを使用できないのはなぜですか? スクレイピー・ランスパイダーのように、スパイダーの名前がスクレイピー・クロールで読み取られないのはなぜですか?

Scrapy は素晴らしいように見えますが、一見すると非常に気がかりです :/

助けてくれて本当にありがとうございます

4

1 に答える 1

0

Scrapy 0.14 を実行する場合、インスタンス レベルではなく、クラス レベルで変数を設定する必要があります。これは0.15で変わったと思います

ドキュメントを読むことをお勧めします: http://doc.scrapy.org/en/0.14/topics/spiders.html

class MySpider(BaseSpider):
        name= 'spider'
        domain = domain
        allowed_domains = [self.domain]
        start_urls = [ 'http://'+self.domain ]


    def parse(self, response):
        hxs = HtmlPathSelector(response)
        for url in hxs.select('//a/@href').extract():
            if not url.startswith('http://'):
                url= URL + url 
            print url
        yield Request(url, callback=self.parse)
于 2012-10-10T13:18:11.067 に答える