Scrapy 只产生最后一个元素
Scrapy yields only the last element
我正在 scrapy
的帮助下抓取一些 courses/lessons,但它似乎只产生列表的 last 元素。
这是有问题的代码:
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
函数中的教训总是相同的。
我在这里完全遗漏了什么吗?
啊...经典的指针问题!
我不确定为什么会发生这种情况,除了您生成的请求在堆栈中携带具有相同地址的项目。
解决方法如下:
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']
显然。
告诉我进展如何。
我正在 scrapy
的帮助下抓取一些 courses/lessons,但它似乎只产生列表的 last 元素。
这是有问题的代码:
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
函数中的教训总是相同的。
我在这里完全遗漏了什么吗?
啊...经典的指针问题!
我不确定为什么会发生这种情况,除了您生成的请求在堆栈中携带具有相同地址的项目。
解决方法如下:
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']
显然。
告诉我进展如何。