我有一个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(),
}
修改:修复代码以防有人搜索
答案 0 :(得分:1)
代码中有拼写错误。 parse_level2
中的回调是self.parsedetails
,但该函数名为parse_details
。
只需将yield
中的parse_level2
更改为:
yield scrapy.Request(url=url2,callback=self.parse_details)
..它应该会更好。