Scrapy以unipre而不是ascii返回字符串。要将所有字符串编码为utf-8,可以编写:
vriskoit['eponimia'] = [s.enpre('utf-8') for s in hxs.select('//a[@itemprop="name"]/text()').extract()]但我认为你会期待另一个结果。你的代码返回包含所有搜索结果的一项。要为每个结果返回项目:
hxs = HtmlXPathSelector(response)for eponimia, address in zip(hxs.select("//a[@itemprop='name']/text()").extract(), hxs.select("//div[@]/text()").extract()): vriskoit = VriskoItem() vriskoit['eponimia'] = eponimia.enpre('utf-8') vriskoit['address'] = address.enpre('utf-8') yield vriskoit更新资料
JSON导出程序
u03a4默认会编写转义的unipre符号(例如),因为并非所有流都可以处理unipre。它可以选择将它们编写为
unipre ensure_ascii=False(请参阅docs.json.dumps)。但是我找不到将这个选项传递给标准Feed导出程序的方法。
因此,如果希望导出的项目以
utf-8编码形式编写,例如在文本编辑器中读取它们,则可以编写自定义项目管道。
pipelines.py:import jsonimport precsclass JsonWithEncodingPipeline(object): def __init__(self): self.file = precs.open('scraped_data_utf8.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 def spider_closed(self, spider): self.file.close()不要忘记将此管道添加到·:
ITEM_PIPELINES = ['vrisko.pipelines.JsonWithEncodingPipeline']
你可以自定义管道,以更易读的格式写入数据,例如,可以生成某些格式的报告。·只是基本示例。



