2

在 python scraper/spider 上工作,遇到了一个超过字符限制的 URL,标题为 IOError。使用 httplib2 并且当我尝试检索 URL 时,我收到一个文件名太长的错误。因为我使用的是 Dropbox,所以我更喜欢将我的所有项目都放在主目录中。无论如何围绕这个问题,还是我应该在家外设置我的工作目录?

4

3 回答 3

6

您可能遇到了加密文件系统的限制,它允许文件名中最多包含 143 个字符。

这是错误: https ://bugs.launchpad.net/ecryptfs/+bug/344878

目前的解决方案是使用加密主目录之外的任何其他目录。要仔细检查:

mount | grep ecryptfs

并查看是否列出了您的主目录。如果是这种情况,请使用 home 上方的其他目录,或者在不使用加密的情况下创建一个新的主目录。

于 2013-05-08T19:16:50.980 回答
2

文件名开头太长的事实'.cache/www.example.com'解释了这个问题。

httplib2可选择缓存您发出的请求。您已启用缓存,并将其.cache作为缓存目录。

简单的解决方案是将缓存目录放在其他地方。

如果没有看到您的代码,就不可能告诉您如何修复它。但这应该是微不足道的。的文档FileCache显示它以 adir_name作为第一个参数。

或者,您可以传递一个safe函数,让您从 URI 生成文件名,覆盖默认值。这将允许您生成适合 Ubuntu 加密 fs 的 144 个字符限制的文件名。

或者,或者,您可以创建自己的具有相同接口的对象,FileCache并将其传递给Http对象以用作缓存。例如,您可以使用tempfile创建随机文件名,并将 URL 到文件名的映射存储在anydbmsqlite3数据库中。

当然,最后一种选择是关闭缓存。

于 2013-02-15T00:57:44.697 回答
2

由于您显然已传递'.cache'httplib.Http构造函数,因此您应该将其更改为更合适的内容或禁用缓存。

于 2013-02-15T00:58:19.373 回答