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