使用刮擦进行递归抓取期间的属性错误



我有一个刮擦蜘蛛,只要我给它一个包含指向它应该抓取的页面的链接的页面,它就可以很好地工作。现在,我不想给它所有类别,而是提供包含所有类别链接的页面。我想我可以简单地添加另一个解析函数来实现这一点。

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

"属性错误:'zaubersonder' 对象没有属性'解析细节'">

这告诉我某些属性引用无法正常工作。我是面向对象的新手,但我认为 scrapy 正在调用 parse,它调用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(),
        }

编辑:修复了代码,以防有人搜索它

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

只需将 parse_level2 中的yield更改为:

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

..它应该工作得更好。

最新更新