在抓取时,我在提取的数据中得到十六进制代码点,如\ u0026#39;。和\ u003c。问题是提取时,它们会通过在它们之前获得一个\来逃脱,例如\\ u0026#39和\\ u003c。因此,为了解决我使用的问题,
Tag = response.xpath("//script[contains(.,'" + SplitString + "')]").extract()
Tag = Tag[0].split(SplitString)
Tag = Tag[1].split("\"]")
Tag = codecs.getdecoder('unicode_escape')(Tag[0])[0]
但是使用“ unicode_escape”的问题在于它会更改一些特殊符号(例如❤️❤️)并将其转换为°ÂÂŽ¢¢¢¤¤ÂÂÂÂÂÂÂÂÂÂÂŽŽˆÂ¢Â¤¤ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂø¸é了那我该如何解决呢?
源代码中的脚本如下:
<script nonce="q0OGvOrA73kvqp+Tk1lGIR+glJc">AF_initDataCallback({key: 'ds:4', isError: false , hash: '17', data:function(){return [[["Machineship"]
,null,null,[1]
,null,[["CBSqARUKEwiZjNDE8bDcAhWKI2gKHV8ZDtA\u003d"]
,["CBSqARUKEwiYjNDE8bDcAhWKI2gKHV8ZDtA\u003d"]],[[null,"Enjoy different kind of magazines and entertainment\u003cbr\u003e3 on the various supported classic rule.\u003cbr\u003e\u003cbr\u003e[Feature]\u003cbr\u003e- 1 to max 4 can join\u003cbr\u003e- You can select one of three different patterns.\u003cbr\u003e- :\u003cbr\u003ehttps://www.example.com"]
,[null,"Best \u0026quot;ad-free\u0026quot; entertainment for kids!\u003cbr\u003e❤️❤️"]
]
,null,[[[null,2,[800,1200]............... </script>
然后我要从中提取:最佳的儿童“无广告”娱乐内容!
❤️❤️
答案 0 :(得分:1)
您可以使用tag.encode('utf-8')
对字符串进行正确编码,这将返回字节,这意味着在写入文件 eg wb
时必须使用f = open('filename, 'wb')
。下面的脚本现在对字符串进行编码。
from scrapy.selector import Selector
body = '<script nonce="q0OGvOrA73kvqp+Tk1lGIR+glJc">AF_initDataCallback({key: \'ds:4\', isError: false , hash: \'17\', data:function(){return [[["Machineship"]\n,null,null,[1]\n,null,[["CBSqARUKEwiZjNDE8bDcAhWKI2gKHV8ZDtA\u003d"]\n,["CBSqARUKEwiYjNDE8bDcAhWKI2gKHV8ZDtA\u003d"]],[[null,"Enjoy different kind of magazines and entertainment\u003cbr\u003e3 on the various supported classic rule.\u003cbr\u003e\u003cbr\u003e[Feature]\u003cbr\u003e- 1 to max 4 can join\u003cbr\u003e- You can select one of three different patterns.\u003cbr\u003e- :\u003cbr\u003ehttps://www.example.com"]\n,[null,"Best \u0026quot;ad-free\u0026quot; entertainment for kids!\u003cbr\u003e❤️❤️"]\n]\n,null,[[[null,2,[800,1200]............... </script>'
split_string = 'm"]\n,[null,"'
tag = Selector(text=body).xpath("//script[contains(.,'" + split_string + "')]").extract()
tag = tag[0].split(split_string)
tag = tag[1].split("\"]")
tag = tag[0]
f = open('test.txt', 'wb')
tag = tag.encode('utf-8')
f.write(tag)
f.close()
print('done')
它打印:Best "ad-free" entertainment for kids!<br>❤️❤️
我不确定您从何处获得双斜杠,但实际上可能需要使用它们来转义字符串中的斜杠,因此可能不会造成问题。