在 python scraper/spider 上工作,遇到了一个超过字符限制的 URL,标题为 IOError。使用 httplib2 并且当我尝试检索 URL 时,我收到一个文件名太长的错误。因为我使用的是 Dropbox,所以我更喜欢将我的所有项目都放在主目录中。无论如何围绕这个问题,还是我应该在家外设置我的工作目录?
3 回答
您可能遇到了加密文件系统的限制,它允许文件名中最多包含 143 个字符。
这是错误: https ://bugs.launchpad.net/ecryptfs/+bug/344878
目前的解决方案是使用加密主目录之外的任何其他目录。要仔细检查:
mount | grep ecryptfs
并查看是否列出了您的主目录。如果是这种情况,请使用 home 上方的其他目录,或者在不使用加密的情况下创建一个新的主目录。
文件名开头太长的事实'.cache/www.example.com'
解释了这个问题。
httplib2
可选择缓存您发出的请求。您已启用缓存,并将其.cache
作为缓存目录。
简单的解决方案是将缓存目录放在其他地方。
如果没有看到您的代码,就不可能告诉您如何修复它。但这应该是微不足道的。的文档FileCache
显示它以 adir_name
作为第一个参数。
或者,您可以传递一个safe
函数,让您从 URI 生成文件名,覆盖默认值。这将允许您生成适合 Ubuntu 加密 fs 的 144 个字符限制的文件名。
或者,或者,您可以创建自己的具有相同接口的对象,FileCache
并将其传递给Http
对象以用作缓存。例如,您可以使用tempfile
创建随机文件名,并将 URL 到文件名的映射存储在anydbm
或sqlite3
数据库中。
当然,最后一种选择是关闭缓存。
由于您显然已传递'.cache'
给httplib.Http
构造函数,因此您应该将其更改为更合适的内容或禁用缓存。