首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刮擦请求返回notImplementedError

刮擦请求返回notImplementedError
EN

Stack Overflow用户
提问于 2016-01-04 21:20:43
回答 2查看 7.2K关注 0票数 4

我的代码不起作用,我也不知道!我想刮宜家的网站,我首先设计了一个CrawlSpider,这是不够具体的检索每个链接的网页。因此,我设计了一个基本的蜘蛛产量要求方法。

这是我的代码:

代码语言:javascript
复制
class IkeaSpider(scrapy.Spider) :        
    name = "Ikea"
    allower_domains = ["http://www.ikea.com/"]
    start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"]



    def parse_url(self, response):

        for sel in response.xpath('//div[@id="productsAzLeft"]'):

            base_url = 'http://www.ikea.com/'
            follow_url = sel.xpath('//span[@class="productsAzLink"]/@href').extract()
            complete_url = urlparse.urljoin(base_url, follow_url)
            request = Request(complete_url, callback = self.parse_page)

            yield request


    def parse_page(self, response):

下面是错误日志:

代码语言:javascript
复制
2016-01-04 22:06:31 [scrapy] ERROR: Spider error processing <GET http://www.ikea.com/fr/fr/catalog/productsaz/8/> (referer: None)
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 588, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", line 76, in parse
    raise NotImplementedError
NotImplementedError
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-04 21:24:24

您的蜘蛛需要一个parse方法,它是所有初始请求的默认回调。您只需将parse_url方法重命名为parse,它就能正常工作。

代码语言:javascript
复制
class IkeaSpider(scrapy.Spider) :

    name = "Ikea"
    allower_domains = ["http://www.ikea.com/"]
    start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"]


    def parse(self, response):

        for sel in response.xpath('//div[@id="productsAzLeft"]'):

            base_url = 'http://www.ikea.com/'
            follow_url = sel.xpath('//span[@class="productsAzLink"]/@href').extract()
            complete_url = urlparse.urljoin(base_url, follow_url)
            request = Request(complete_url, callback = self.parse_page)

            yield request

备选方案

您还可以定义start_requests方法,并使用定义的callback参数手动生成callback,就像在这里所做的那样。

票数 8
EN

Stack Overflow用户

发布于 2016-01-04 21:25:54

如果只想使用蜘蛛的parse方法,则必须实现这里方法,因为您可以检查这里

parse方法是从start_urls内部urls发出的请求的默认回调。

如果希望从一开始就控制请求,还可以使用start_requests方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34600064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档