怎么把scrapy爬取的数据存在json中

新手上路,请多包涵

问题描述

目前正在用scrapy去很多域名,想存在本地json文件方便以后读取,但是存进json的格式不太对,老是报错

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
主文件:
class ChinaZSpider(scrapy.Spider):

name = 'chinaz'
allowed_domains = 'top.chinaz.com'

def start_requests(self):
    for i in range(2,3):
        base_url = 'https://top.chinaz.com/gongsi/index_shizhi_{}.html'.format(i)
        yield Request(url=base_url, callback=self.parse_1, dont_filter=True)

def parse_1(self, response):
    suffix = response.xpath('//ul/li/div/h3/a/@href').extract()
    for i in suffix:
        url = 'https://top.chinaz.com{}'.format(i)
        yield Request(url=url, callback=self.parse_2, dont_filter=True)

def parse_2(self, response):
    item = ChinazItem()
    item['domain'] = response.xpath('//div[6]//span/a/text()').extract()
    yield item
    

pipeline文件:
import json
import codecs

class ChinazPipeline(object):

def __init__(self):
    self.file = codecs.open('save.json', 'w', encoding='utf-8')

def process_item(self, item, spider):
    line = json.dumps(dict(item), ensure_ascii=False) + "\n"
    self.file.write(line)
    return item

你期待的结果是什么?实际看到的错误信息又是什么?

目前保存到json里面是这样的:
{"domain": ["www.cebbank.com"]}
{"domain": ["www.xiaojukeji.com"]}
{"domain": ["www.yili.com"]}
{"domain": ["www.163.com"]}

希望的格式是{"domain": ["www.cebbank.com", "xiaojukeji.com", "www.yili.com"]}
相当于一个key对应一个列表里的value,或者直接把域名以列表的形式存到json里面,哪种都行,求助!

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题