Scrapy -如何等待json页面完全加载

yx2lnoni  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(127)

我刮json页,但有时我得到这个错误:

ERROR: Spider error processing <GET https://reqbin.com/echo/get/json/page/2>
Traceback (most recent call last):
  File "/home/user/.local/lib/python3.8/site-packages/twisted/internet/defer.py", line 857, in _runCallbacks
    current.result = callback( # type: ignore[misc]
  File "/home/user/path/scraping.py", line 239, in parse_images
    jsonresponse = json.loads(response.text)
  File "/usr/lib/python3.8/json/init.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 48662 (char 48661)

所以我怀疑json页面没有时间完全加载,这就是为什么解析json内容失败的原因。如果我手动解析,我的意思是把json内容作为一个字符串,用json模块加载它,它会工作,我不会得到json.decoder.JSONDecodeError错误。
到目前为止,我所做的是在settings.py中设置:

DOWNLOAD_DELAY = 5

DOWNLOAD_TIMEOUT = 600

DOWNLOAD_FAIL_ON_DATALOSS = False

CONCURRENT_REQUESTS = 8

希望它能减缓刮擦速度,解决我的问题,但问题仍然发生。
如何确保json页面完全加载,使其内容的解析不会失败?

ljsrvy3e

ljsrvy3e1#

您可以尝试增加DOWNLOAD_TIMEOUT。这通常会有帮助。如果这还不够,您可以尝试减少CONCURRENT_REQUESTS。
如果仍然没有帮助,尝试使用重试请求。您可以编写自己的retry_request函数并将其命名为return self.retry_request(response)
或者像这样做req = response.request.copy(); req.dont_filter=Truereturn req
您还可以使用RetryMiddleware。有关更多信息,请访问文档页面https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.retry

相关问题