使用scrapy进行递归抓取时的属性错误

时间:2017-11-19 15:56:21

标签: python web-scraping scrapy

我有一个scrapy蜘蛛,只要我给它一个页面,其中包含应该抓取的页面的链接,效果很好。 现在我想不给它所有类别,而是包含所有类别链接的页面。 我想我可以简单地添加另一个解析函数来实现这一点。

但是控制台输出给了我一个属性错误

  

“attributeError:'zaubersonder'对象没有属性   'parsedetails'“

这告诉我some attribute refference无法正常工作。 我是面向对象的新手,但是我觉得很难调用解析调用prase_level2来调用parse_details,这应该可以正常工作。

下面是我的努力。

import scrapy


class zaubersonder(scrapy.Spider):
    name = 'zaubersonder'
    allowed_domains = ['abc.de']
    start_urls = ['http://www.abc.de/index.php/rgergegregre.html'
                 ]




    def parse(self, response):
        urls = response.css('a.ulSubMenu::attr(href)').extract() # links to categories
        for url in urls:
            url = response.urljoin(url)
            yield scrapy.Request(url=url,callback=self.parse_level2)

    def parse_level2(self, response):
        urls2 = response.css('a.ulSubMenu::attr(href)').extract() # links to entries
        for url2 in urls2:
            url2 = response.urljoin(url2)
            yield scrapy.Request(url=url2,callback=self.parse_details)

    def parse_details(self,response): #extract entries
        yield {
            "Titel": response.css("li.active.last::text").extract(),
            "Content": response.css('div.ce_text.first.block').extract() + response.css('div.ce_text.last.block').extract(),
        }

修改:修复代码以防有人搜索

1 个答案:

答案 0 :(得分:1)

代码中有拼写错误。 parse_level2中的回调是self.parsedetails,但该函数名为parse_details

只需将yield中的parse_level2更改为:

即可
yield scrapy.Request(url=url2,callback=self.parse_details)

..它应该会更好。