-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的版本。最新版本使用“name”而不是“domain_name”属性来唯一标识蜘蛛。

于 2010-12-27T20:19:01.090 回答
3

这两行看起来像是在造成麻烦:

u = names.pop()

rules = (Rule(SgmlLinkExtractor(allow=(u, )), callback='parse_item'),)
  • 每次运行脚本时只遵循一个规则。考虑为每个 URL 创建一个规则。
  • 您尚未创建parse_item回调,这意味着该规则不执行任何操作。您定义的唯一回调是parse,它会更改蜘蛛的默认行为。

此外,这里有一些值得研究的事情。

  • CrawlSpider不喜欢parse重载其默认方法。parse_start_url在文档或文档字符串中搜索。您会看到这是覆盖parse起始 URL 的默认方法的首选方法。
  • NuSpider.hxs在定义之前调用。
于 2010-07-18T19:17:06.247 回答
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 回答
2

你有没有SPIDER_MODULES在你的scrapy_settings.py 的列表中包含蜘蛛?

它没有写在教程中任何你应该这样做的地方,但你必须这样做。

于 2009-11-27T14:30:49.400 回答