Scrapy爬虫无法工作

-1 投票
5 回答
5987 浏览
提问于 2025-04-15 16:26

因为到目前为止没有任何方法有效,我开始了一个新项目,使用的是

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识别了,但这个却没有。我到底哪里做错了呢?

谢谢你的帮助!

5 个回答

3

这两行代码看起来是问题的根源:

u = names.pop()

rules = (Rule(SgmlLinkExtractor(allow=(u, )), callback='parse_item'),)
  • 每次运行这个脚本时,只会执行一条规则。建议为每个网址创建一条规则。
  • 你还没有创建一个叫做 parse_item 的回调函数,这意味着这条规则没有任何作用。你定义的唯一回调函数是 parse,它改变了爬虫的默认行为。

另外,还有一些值得关注的地方:

  • CrawlSpider 不喜欢重写它的默认 parse 方法。可以在文档或注释中搜索 parse_start_url,你会发现这是覆盖默认 parse 方法的推荐方式,适用于你的起始网址。
  • NuSpider.hxs 在被定义之前就被调用了。
3

你有没有把爬虫加到 SPIDER_MODULES 列表里,在你的 scrapy_settings.py 文件中?

虽然教程里没有明确说你需要这么做,但其实这是必须的。

6

请检查一下你使用的scrapy版本。最新的版本用“name”这个属性来唯一标识一个爬虫,而不是以前的“domain_name”。

撰写回答