-1

これまでのところ何も機能していないので、新しいプロジェクトを開始しました

python scrapy-ctl.py startproject Nu

チュートリアルに正確に従い、フォルダーと新しいスパイダーを作成しました

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from Nu.items import NuItem
from urls import u

class NuSpider(CrawlSpider):
    domain_name = "wcase"
    start_urls = ['http://www.whitecase.com/aabbas/']

    names = hxs.select('//td[@class="altRow"][1]/a/@href').re('/.a\w+')

    u = names.pop()

    rules = (Rule(SgmlLinkExtractor(allow=(u, )), callback='parse_item'),)

    def parse(self, response):
        self.log('Hi, this is an item page! %s' % response.url)

        hxs = HtmlXPathSelector(response)
        item = Item()
        item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)')
        return item

SPIDER = NuSpider()

そして私が走るとき

C:\Python26\Scripts\Nu>python scrapy-ctl.py crawl wcase

私は得る

[Nu] ERROR: Could not find spider for domain: wcase

少なくとも他のスパイダーは Scrapy によって認識されますが、これは認識されません。私は何を間違っていますか?

ご協力いただきありがとうございます!

4

5 に答える 5

6

また、scrapy のバージョンも確認してください。最新バージョンでは、「domain_name」属性の代わりに「name」を使用して、スパイダーを一意に識別します。

于 2010-12-27T20:19:01.090 に答える
3

次の 2 行が問題を引き起こしているようです。

u = names.pop()

rules = (Rule(SgmlLinkExtractor(allow=(u, )), callback='parse_item'),)
  • スクリプトが実行されるたびに、1 つのルールのみが実行されます。URL ごとにルールを作成することを検討してください。
  • コールバックを作成してparse_itemいません。つまり、ルールは何もしません。定義した唯一のコールバックはparse、スパイダーのデフォルトの動作を変更する です。

また、ここで検討する価値のあることがいくつかあります。

  • CrawlSpiderparseデフォルトのメソッドがオーバーロードされるのは好きではありません。parse_start_urlドキュメントまたはドキュメント文字列で検索してください。parseこれは、開始 URLのデフォルトの方法をオーバーライドするための推奨される方法であることがわかります。
  • NuSpider.hxs定義される前に呼び出されます。
于 2010-07-18T19:17:06.247 に答える
2

スパイダーをSPIDER_MODULESscrapy_settings.pyのリストに含めましたか?

チュートリアルには、これを行うべき場所は書かれていませんが、そうする必要があります。

于 2009-11-27T14:30:49.400 に答える
2

そこに構文エラーがあると思います。オブジェクトのname = hxs...前に定義されていないため、は機能しません。hxs

python yourproject/spiders/domain.py実行して構文エラーを取得してみてください。

于 2010-05-22T03:03:19.760 に答える
2

parse新しいメソッドを実装する代わりに、メソッドをオーバーライドしていますparse_item

于 2011-10-12T18:21:58.287 に答える