gpt4 book ai didi

python - Scrapy 蜘蛛 : dealing with pages that have incorrectly-defined character encoding

转载 作者:太空狗 更新时间:2023-10-30 01:09:43 27 4
gpt4 key购买 nike

更新:只需从命令行运行即可重现此错误:

scrapy shell http://www.indiegogo.com/Straight-Talk-About-Your-Future

我正在使用 Scrapy 来抓取网站。我抓取的每个页面都声称是 UTF-8 编码的:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type">

但偶尔,页面包含不属于 UTF-8 的字节,我会收到 Scrapy 错误,例如:

exceptions.UnicodeDecodeError: 'utf8' codec can't decode byte 0xe8 in position 131: invalid continuation byte

我仍然需要抓取这些页面,即使它们包含无法映射的字符。有没有办法告诉 Scrapy 覆盖页面声明的编码,并使用另一种编码(比如 UTF-16)代替?

这里是捕获异常的地方:

2012-05-30 14:43:20+0200 [igg] ERROR: Spider error processing <GET http://www.site.com/page>
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/twisted/internet/base.py", line 1178, in mainLoop
self.runUntilCurrent()
File "/Library/Python/2.7/site-packages/twisted/internet/base.py", line 800, in runUntilCurrent
call.func(*call.args, **call.kw)
File "/Library/Python/2.7/site-packages/twisted/internet/defer.py", line 368, in callback
self._startRunCallbacks(result)
File "/Library/Python/2.7/site-packages/twisted/internet/defer.py", line 464, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "/Library/Python/2.7/site-packages/twisted/internet/defer.py", line 551, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Library/Python/2.7/site-packages/scrapy/core/spidermw.py", line 61, in process_spider_output
result = method(response=response, result=result, spider=spider)

最佳答案

在最新的 dev scrapy (0.15) 中有一些关于编码的工作。可能值得尝试最新版本。

Scrapy 允许您通过 response.body_as_unicode 访问 unicode .它以与浏览器类似的方式处理编码检测,你应该几乎总是使用它而不是原始主体。从 scrapy 0.15 开始,它依赖于 w3lib.encoding.html_to_unicode , 有一点定制。

当有人请求 unicode 时,解码会延迟发生。您可以创建一个新的响应,根据您在蜘蛛中收到的响应指定自己的编码,但是,这不是必需的。

从回溯中并不清楚是哪一段代码实际导致了错误的发生。有更详细的吗?另一种可能性是正文以某种方式被截断了。

如果这些页面由浏览器而不是 scrapy 正确处理,那么如果您可以制作一个简单的测试用例并报告错误,我们将不胜感激。

关于python - Scrapy 蜘蛛 : dealing with pages that have incorrectly-defined character encoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10735836/

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