问题描述
|
我是python和scrapy的新手,并且正在关注dmoz教程。作为本教程建议的起始URL的一个较小变体,我从dmoz示例站点中选择了一个日语类别,并注意到最终得到的Feed导出显示的是unicode数字值,而不是实际的日语字符。
似乎我需要以某种方式使用TextResponse,但是我不确定如何使我的蜘蛛使用该对象而不是基本的Response对象。
如何修改代码以在输出中显示日语字符?
如何摆脱方括号,单引号和包裹输出值的“ u”?
最终,我想说说
オンラインショップ(这些是日本字符)
而不是当前的输出
[u \'\\ u30aa \\ u30f3 \\ u30e9 \\ u30a4 \\ u30f3 \\ u30b7 \\ u30e7 \\ u30c3 \\ u30d7 \'](Unicode)
如果您查看我的屏幕截图,它对应于单元格C7(文本标题之一)。
这是我的蜘蛛(与本教程中的蜘蛛相同,不同的是start_url):
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from dmoz.items import DmozItem
class DmozSpider(BaseSpider):
name = \"dmoz.org\"
allowed_domains = [\"dmoz.org\"]
start_urls = [
\"http://www.dmoz.org/World/Japanese/\"
]
def parse(self,response):
hxs = HtmlXPathSelector(response)
sites = hxs.select(\'//ul/li\')
items = []
for site in sites:
item = DmozItem()
item[\'title\'] = site.select(\'a/text()\').extract()
item[\'link\'] = site.select(\'a/@href\').extract()
item[\'desc\'] = site.select(\'text()\').extract()
items.append(item)
return items
settings.py:
Feed_URI = \'items.csv\'
Feed_FORMAT = \'csv\'
输出截图:
http://i55.tinypic.com/eplwlj.png(对不起,我没有足够的SO点来发布图片)
解决方法
从页面抓取文本时,它以Unicode格式存储。
您要做的是将其编码为类似UTF8的格式。
unicode_string.encode(\'utf-8\')
同样,当使用选择器提取文本时,即使只有一个结果,该文本也存储在列表中,因此您需要选择第一个元素。