2016-08-02 129 views
1

我在scrapy的帮助下刮了一些课程/课程,但是它似乎只产生最近的元素列表。
下面的代码有问题:Scrapy只产生最后一个元素

def parse_course_list(self, response): 
    """ Scrape list of lessons for each course """ 
    lessons = response.css('ul.lessons-list a') 
    for lesson in lessons: 
     title = lesson.xpath("text()").extract_first().strip() 
     link = lesson.xpath("@href").extract_first().strip() 

     url = response.urljoin(link) 
     item = response.meta['item'] 
     item['Lesson'] = title 
     item['URL'] = link 

     yield scrapy.Request(url, \ 
      callback=self.parse_lesson, 
      meta={'item': item} \ 
     ) 

所以基本上我刮的教训和产量的详细信息页面的请求。但是,parse_lesson函数的教训总是相同的。
我完全错过了什么吗?

回答

2

啊...经典的指针问题!

我不知道为什么会发生这种情况,除此之外,您正在屈服的请求携带栈中相同地址的项目。

这里是你如何解决这个问题:

def parse_course_list(self, response): 
    lessons = response.css('ul.lessons-list a') 
    itemToCopy = response.meta['item'] 
    for lesson in lessons: 
     item=itemToCopy.copy() 
     ... 

剩下的只是因为它是减去item = response.meta['item']明显。

告诉我它是怎么回事。

+0

它进行得很顺利,muito obrigado :)虽然我在一行中做了:'item = reponse.meta ['item']。copy()',这很好,不是吗? – Jan

+0

是的,我将声明和分配分开,以便更容易理解,很高兴解决;) –

相关问题