2016-08-02 208 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

是的,我將聲明和分配分開,以便更容易理解,很高興解決;) –

相關問題