【发布时间】:2018-10-09 13:16:02
【问题描述】:
我正在从喜欢 one 的 moocs 中抓取评论
从那里我得到所有课程详细信息、5 个项目和每个评论本身的另外 6 个项目。
这是课程详情的代码:
def parse_reviews(self, response):
l = ItemLoader(item=MoocsItem(), response=response)
l.add_xpath('course_title', '//*[@class="course-header-ng__main-info__name__title"]//text()')
l.add_xpath('course_description', '//*[@class="course-info__description"]//p/text()')
l.add_xpath('course_instructors', '//*[@class="course-info__instructors__names"]//text()')
l.add_xpath('course_key_concepts', '//*[@class="key-concepts__labels"]//text()')
l.add_value('course_link', response.url)
return l.load_item()
现在我想包含评论详细信息,每条评论另外 5 个项目。 由于课程数据对于所有评论都是通用的,因此我想将其存储在不同的文件中,然后使用课程名称/ID 来关联数据。
这是我的评论项目代码:
for review in response.xpath('//*[@class="review-body"]'):
review_body = review.xpath('.//div[@class="review-body__content"]//text()').extract()
course_stage = review.xpath('.//*[@class="review-body-info__course-stage--completed"]//text()').extract()
user_name = review.xpath('.//*[@class="review-body__username"]//text()').extract()
review_date = review.xpath('.//*[@itemprop="datePublished"]/@datetime').extract()
score = review.xpath('.//*[@class="sr-only"]//text()').extract()
我尝试使用临时解决方案,返回每个案例的所有项目,但也没有工作:
def parse_reviews(self, response):
#print response.body
l = ItemLoader(item=MoocsItem(), response=response)
#l = MyItemLoader(selector=response)
l.add_xpath('course_title', '//*[@class="course-header-ng__main-info__name__title"]//text()')
l.add_xpath('course_description', '//*[@class="course-info__description"]//p/text()')
l.add_xpath('course_instructors', '//*[@class="course-info__instructors__names"]//text()')
l.add_xpath('course_key_concepts', '//*[@class="key-concepts__labels"]//text()')
l.add_value('course_link', response.url)
for review in response.xpath('//*[@class="review-body"]'):
l.add_xpath('review_body', './/div[@class="review-body__content"]//text()')
l.add_xpath('course_stage', './/*[@class="review-body-info__course-stage--completed"]//text()')
l.add_xpath('user_name', './/*[@class="review-body__username"]//text()')
l.add_xpath('review_date', './/*[@itemprop="datePublished"]/@datetime')
l.add_xpath('score', './/*[@class="sr-only"]//text()')
yield l.load_item()
该脚本的输出文件已损坏,单元格移位且字段大小不正确。
编辑: 我想在输出中有两个文件:
第一个包含:
course_title,course_description,course_instructors,course_key_concepts,course_link
第二个是:
course_title,review_body,course_stage,user_name,review_date,score
【问题讨论】:
-
你能分享一个收到的输出样本,以及一个期望输出的例子吗?
-
@EvyatarMeged 我只是为每个文件指定我想要的列。
标签: python scrapy scrapy-pipeline