Scrapy只产生最后一个元素

时间:2016-08-02 11:42:14

标签: python scrapy scrapy-spider

我正在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功能中的课程始终相同 我在这里完全错过了什么吗?

1 个答案:

答案 0 :(得分: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']

告诉我它是怎么回事。