web-dev-qa-db-ja.com

スクレイピースパイダーが見つからないエラー

これはWindows 7でpython 2.7

Capsというディレクトリにスクレイピープロジェクトがあります(scrapy.cfgがある場所です)

私のスパイダーはcaps\caps\spiders\campSpider.pyにあります

スクレイピープロジェクトにcdして実行しよう

scrapy crawl campSpider -o items.json -t json

クモが見つからないというエラーが表示されます。クラス名iscampSpider

...
    spider = self.crawler.spiders.create(spname, **opts.spargs)
  File "c:\Python27\lib\site-packages\scrapy-0.14.0.2841-py2.7-win32.Egg\scrapy\spidermanager.py", l
ine 43, in create
    raise KeyError("Spider not found: %s" % spider_name)
KeyError: 'Spider not found: campSpider'

構成アイテムがありませんか?

31
user199421

スパイダーの"name"プロパティが設定されていることを確認してください。例:

class campSpider(BaseSpider):
   name = 'campSpider'

Nameプロパティがないと、スクレイピーマネージャーはあなたのクモを見つけることができません。

50
Sjaak Trekhaak

また、プロジェクトがscrapyと呼ばれないようにしてください!私はその間違いを犯し、名前を変更して問題を解決しました。

24
tamalet

コマンドラインでscrapy listを実行してみてください。スパイダーにエラーがある場合、それを検出します。

私の場合、別のプロジェクトからコードを率直にコピーし、スパイダーモジュールのインポートからプロジェクト名を変更するのを忘れていました

3
Aminah Nuraini

SPIDER_MODULES 設定をセットアップしましたか?

SPIDER_MODULES

デフォルト: []

Scrapyがスパイダーを探すモジュールのリスト。

例:

SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']

3
warvariuc

クモに名前を付けなければなりません。

ただし、BaseSpiderdeprecatedで、Spider代わりに。

from scrapy.spiders import Spider
class campSpider(Spider):
   name = 'campSpider'

プロジェクトは、startprojectコマンドによって作成されている必要があります。

scrapy startproject project_name

これにより、次のディレクトリツリーが得られます。

project_name/
    scrapy.cfg            # deploy configuration file

    project_name/             # project's Python module, you'll import your code from here
        __init__.py

        items.py          # project items file

        pipelines.py      # project pipelines file

        settings.py       # project settings file

        spiders/          # a directory where you'll later put your spiders
            __init__.py
            ...

settings.pyにスパイダーモジュールの定義があることを確認してください。例えば:

BOT_NAME = 'bot_name' # Usually equals to your project_name 

SPIDER_MODULES = ['project_name.spiders']
NEWSPIDER_MODULE = 'project_name.spiders'

スパイダーをローカルまたは ScrappingHub で実行しても問題ありません。

2
Rodrigo Ney

同じ問題が発生する可能性がある人は、スパイダーのnameを設定し、SPIDER_MODULESおよびNEWSPIDER_MODULEスクレイピー設定で、scrapydサービスを実行している場合は、変更を適用するために再起動する必要があります

1

スパイダーファイルがスパイダーディレクトリに保存されていることを確認してください。クローラーはスパイダーディレクトリでスパイダー名を探します

1
ervinslavotic

プロジェクトを使用しない場合、runspiderとfileNameを使用し、プロジェクトを使用する場合は、クロールと名前のサンプルを使用します:C/user> scrapy runspider myFile.py

0

Name CrawlSpiderクラスの属性はスパイダー名を定義し、この名前はスパイダーを呼び出すためのコマンドラインで使用されます。

import json

from scrapy import Spider
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractor import LinkExtractor

class NameSpider(CrawlSpider):
    name = 'name of spider'
    allowed_domains = ['allowed domains of web portal to be scrapped']
    start_urls = ['start url of of web portal to be scrapped']

    custom_settings = {
        'DOWNLOAD_DELAY': 1,
        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }

    product_css = ['.main-menu']
    rules = [
        Rule(LinkExtractor(restrict_css=product_css), callback='parse'),
    ]

    def parse(self, response):
        //implementation of business logic
0
Asad Manzoor

私もこの問題を抱えていましたが、かなり小さいことがわかりました。クラスがscrapy.Spiderを継承していることを確認してください

my_class(scrapy.Spider):
0
Thomas Gooch

私の場合、「LOG_STDOUT = True」を設定すると、「/ listspiders.json」でスパイダーを探しているときに、scrapydはjson応答に結果を返すことができません。その代わりに、結果は、scrapydのdefault_scrapyd.confファイルで設定したログファイルに出力されます。それで、私はこのように設定を変更しました、そしてそれはうまく働きました。

LOG_STDOUT = False
0
七月飞霜

インデントも確認してください。私のクモのクラスは1タブ分インデントされています。どういうわけか、クラスを無効にするか何か。

0
briankip