2016-08-02 19 views
1

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

これはうまくいっていました。私は1行でやっていました。「item = reponse.meta ['item']。copy() '、それは大丈夫ですか? – Jan

+0

はい、宣言と割り当てを分割して分かりやすくなりました。うまくいきました。) –