我需要从页面上的脚本中抓取一些文本,并将该文本保存在抓取项中(大概是UTF-8字符串)。但是,我从中实际刮取的文字文本中写有一些特殊字符,我认为是UTF十六进制。例如“-”写为“ \ x2f”。如何在我的抓取项目中抓取以“ \ x2f”表示的字符,但将其另存为“-”?
抓取页面上的内容摘录:
<script type="text/javascript">
[approx 100 various lines of script, omitted]
"author": "Kurt\x20Vonnegut",
"internetPrice": "799",
"inventoryType": "new",
"title": "Slaughterhouse\x2DFive",
"publishedYear": "1999",
[approx 50 additional various lines of script, removed]
</script>
我的拼写脚本如下:
pattern_title = r'"title": "(.+)"'
title_raw = response.xpath('//script[@type="text/javascript"]').re(pattern_title)
item['title'] = title_raw[0]
对于此项目,scrapy的输出将返回:
'作者':u'Kurt \ x20Vonnegut','title':u'Slaughterhouse \ x2DFive'
理想情况下,我想要:
“作者”:“ Kurt Vonnegut”,“标题”:“五号屠宰场”
我尝试不更改输出的内容:
最后,在需要明确说明的情况下,我无法控制此信息在我要抓取的网站上的显示方式。
答案 0 :(得分:1)
受Converting \x escaped string to UTF-8的启发,我通过使用.decode('string-escape')来解决此问题,如下所示:
pattern_title = r'"title": "(.+)"'
title_raw = response.xpath('//script[@type="text/javascript"]').re(pattern_title)
title_raw[0] = title_raw[0].decode('string-escape')
item['title'] = title_raw[0]
答案 1 :(得分:0)
您可以使用urllib's unquote功能。
在Python 3.x上:
from urllib.parse importe unquote
unquote("Kurt\x20Vonnegut")
在Python 2.7上:
from urllib import unquote
unquote("Kurt\x20Vonnegut")
看看Item Loaders和Input Processors,以便可以对所有已抓取的字段执行此操作。