我正在使用Scrapy从一些西班牙语网站中提取文本。显然,文本是用西班牙语写的,有些单词有“ñ”或“í”等特殊字符。我的问题是当我在命令行中运行时: scrapy crawl econoticia -o prueba.json 要获取带有抓取数据的文件,某些字符不会以正确的方式显示。例如: 这是原始文本 “La exministra,procesadacomopartícipeatitulo lucrativo,intenta burlar alosfotógrafos” 这是文字刮掉了 “La exministra,procesada como part \ u00edcipe a titulo lucrativo,intenta burlar a los fot \ u00f3grafos” 我希望用特殊字符返回一个json。我认为我的spyder代码需要一些东西以正确的方式获得json。这是我的spyder代码:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import HtmlXPathSelector
from pais.items import PaisItem
class NoticiaSpider(scrapy.Spider):
name = "noticia"
allowed_domains = ["elpais.com"]
start_urls = (...
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
item= PaisItem()
item['subtitulo']=hxs.select('//*[@id="merc"]/div[2]/div[4]/div[1]/div[1]/span/text()').extract()
item['titular']=hxs.select('//*[@id="merc"]/div[2]/div[4]/div[1]/div[3]/div[2]/div[1]/h1/a/text()').extract()
return item
答案 0 :(得分:0)
也许你应该在extract()
之后添加.encode('utf8')答案 1 :(得分:0)
将字符写入文件时,需要将它们编码为UTF-8。尝试将示例的最后几行更改为以下内容:
item['subtitulo']=hxs.select('//*[@id="merc"]/div[2]/div[4]/div[1]/div[1]/span/text()').extract().encode('utf-8')
item['titular']=hxs.select('//*[@id="merc"]/div[2]/div[4]/div[1]/div[3]/div[2]/div[1]/h1/a/text()').extract().encode('utf-8')
return item