我正在用scrapy学习网页抓取。玩得很开心。唯一的问题是我不能以我想要的方式保存这些被刮取的数据
下面的代码从Amazon上截取评论。如何更好地存储数据
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request
import csv
class Oneplus6Spider(scrapy.Spider):
name = 'oneplus6'
allowed_domains = ['amazon.in']
start_urls = ['https://www.amazon.in/OnePlus-Silk-White-128GB-
Storage/product-reviews/B078BNQ2ZS/ref=cm_cr_arp_d_viewopt_sr?
ie=UTF8&reviewerType=all_reviews&filterByStar=positive&pageNumber=1']
def parse(self, response):
writer = csv.writer(open('jack.csv','w+'))
opinions = response.xpath('//*[@class="a-size-base a-link-normal
review-title a-color-base a-text-bold"]/text()').extract()
for opinion in opinions:
yield({'Opinion':opinion})
reviewers = response.xpath('//*[@class="a-size-base a-link-normal
author"]/text()').extract()
for reviewer in reviewers:
yield({'Reviewer':reviewer})
verified = response.xpath('//*[@class="a-size-mini a-color-state a-
text-bold"]/text()').extract()
for verified_buyer in verified:
yield({'Verified_buyer':verified_buyer})
ratings = response.xpath('//span[@class="a-icon-
alt"]/text()').extract()
for rating in ratings:
yield({'Rating':rating[0]})
model_bought = response.xpath('//a[@class="a-size-mini a-link-
normal a-color-secondary"]/text()').extract()
for model in model_bought:
yield({'Model':model})
我尝试了使用scrapy的默认方式-o方法,还尝试了使用csv
数据存储在一行中。我对pandas和csv模块非常陌生,我不知道如何以正确的格式存储刮取的数据
它将所有值存储在一行中。
我希望在不同的行中使用不同的值
例如:评论|评级|模型|
但我就是不知道怎么做
我怎么做
要设置csv数据格式,最简单的方法之一是使用excel power查询清理数据,请执行以下步骤:
您可以使用这些电源查询执行所有类型的数据清理,这是根据需要设置数据格式的最简单方法
从代码中可以看出,您试图提取不同类型的记录:它们都是带有单个键的
dict
对象,其中键可能具有不同的值(“意见”、“审阅者”等)在Scrapy中,将数据导出到CSV由^{} 处理,其中the ^{} method 是当前问题的关键所在,因为导出器在写入第一项之前需要知道字段列表(列名)
具体而言:
fields_to_export
属性(通过提要导出器(related code here)由FEED_EXPORT_FIELDS
设置配置)dict
,它将使用其所有键作为列名李>scrapy.Item
,它将使用项定义中的键李>因此,有几种方法可以解决这个问题:
scrapy.Item
类,并在代码中生成这种类型的项(对于任何特定记录,只需填写您需要的一个字段,其他字段留空)李>FEED_EXPORT_FIELDS
设置,并保持现有代码的其他部分不变李>我想上面的提示就足够了。如果你需要更多的例子,请告诉我
相关问题 更多 >
编程相关推荐