Scrapy爬虫无法工作
因为到目前为止没有任何方法有效,我开始了一个新项目,使用的是
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”。