gpt4 book ai didi

python - 值错误 : Invalid\escape: When readin json as respons in Scrapy

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:37 26 4
gpt4 key购买 nike

在解析过程中,我得到了带有 json 的文本对象响应。他们看起来都非常相似。其中一些工作没有任何错误。但其他人会抛出如下错误。

我尝试使用 replace('\r\n', ''), strict=False. 无济于事。

这是我从中获取 json 的 URL - enter link description here这是我的代码。 (第 51 行是 data=json.loads)

此外,当我在 scrapy shell 中尝试此 url 时,它会打开为空并抛出另一个错误 - 找不到 json 文档。不知道这是否重要。

def parse_jsn(self, response):
#inspect_response(response, self)

data = json.loads(response.body_as_unicode())
item = response.meta['item']
item['text']= data[0]['bodyfull']
yield item

这是错误代码。

ValueError: Invalid \escape: line 4 column 942 (char 945)
2017-03-25 17:21:19 [scrapy.core.scraper] ERROR: Spider error processing <GET
or.com/UserReviewController?a=mobile&r=434622632> (referer: https://www.tripa
w-g60763-d122005-Reviews-or490-The_New_Yorker_A_Wyndham_Hotel-New_York_City_N
Traceback (most recent call last):
File "c:\python27\lib\site-packages\scrapy\utils\defer.py", line 102, in it
yield next(it)
File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\offsite.py", l
der_output
for x in result:
File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\referer.py", l
return (_set_referer(r) for r in result or ())
File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\urllength.py",

return (r for r in result or () if _filter(r))
File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\depth.py", lin
return (r for r in result or () if _filter(r))
File "C:\Code\Active\tripadvisor\tripadvisor\spiders\mtripad.py", line 51,
data = json.loads(response.body_as_unicode(), strict=False)
File "c:\python27\lib\json\__init__.py", line 352, in loads
return cls(encoding=encoding, **kw).decode(s)
File "c:\python27\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\python27\lib\json\decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid \escape: line 4 column 579 (char 582)

最佳答案

首先,+1 用于抓取移动 API。比从 HTML 中抓取要聪明得多!

编码确实存在问题。一些八进制编码字符 ( [...] \074br/\076\074br/\076Best Regards,\074br/\076Emily [...] ) 破坏了 JSON 解析。要摆脱它们,请使用:

response.body.decode('unicode-escape')

数据中还有一些编码的 HTML 字符:"&#x201c;Nice clean and perfectly average&#x201d;" .我建议取消转义:

from HTMLParser import HTMLParser
...
json.loads(HTMLParser().unescape(response.body.decode('unicode-escape'))
...

在 Python 3 中:

import html 
...
json.loads(html.unescape(response.body.decode('unicode-escape')))

结果应如下所示:[{'title': '“Nice clean and perfectly average”', 'bodyfull': '[...] stay. <br/><br/>Best Regards,<br/>Emily Rodriguez", [...]}]

如您所见,结果中有一些 HTML 标记。如果你想删除 HTML 标签,你可以使用像这样的正则表达式:

import re
...
p = re.compile(r'<.*?>')
no_html = p.sub('', str_html))

关于python - 值错误 : Invalid\escape: When readin json as respons in Scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com