2013-02-26 159 views
-2

我是python的新手,并且正在为funsies /教育目的构建一个web爬虫。我不使用任何递归函数,但仍然收到'RuntimeError:最大递归深度超出'错误。我很困惑,有点觉得我错过了某些明显的东西,或者只是误解了某些东西。我以某种方式递归,或者它可能与我的大循环有关?这个想法是抓取网页,直到您抓取10k页面。没有递归的Python递归错误?

更新:

最新的代码是在这里:http://pastebin.com/4v5GT7ft

堆栈跟踪是在这里:http://pastebin.com/9GzAxZM9

看起来像我的问题是试图调用STR()上是不正确编码的URL。我试过解码URL,然后将它们编码为unicode,但我从来没有能够成功完成。任何建议将不胜感激!

+7

请确保包含python例外的* full * traceback。这节省了我们所有人必须*猜测*错误发生的地方。 – 2013-02-26 18:23:06

+2

如果你正在解析HTML你*是*使用递归函数...我建议,当你失败时,你转储页面变量,看看Html是否形式错误 – Crisfole 2013-02-26 18:23:21

+0

我现在在工作,我会发布完整的回溯当我今晚回家时。抱歉。 – Brian 2013-02-26 18:36:07

回答

2

您给我们的代码实际上并没有运行(它缺少所有的import语句,并且它有缩进错误等),它需要我们没有的JET数据库和第三方模块阅读它,并将其硬编码为使用您的主目录中已有的目录。

我试图修复所有在http://pastebin.com/rCJriEu5(这需要lxmlbs4 - 如果您使用不同的解析库或BS3,我可以试试这种方式)。

而当我运行它,它似乎工作。完成31.73%,没有错误。即使我在文件开头执行sys.setrecusionlimit(50),它似乎仍然有效(到目前为止已完成3.67%)。

所以,无论你的代码有什么问题,显然你都没有向我们展示过代码。

+0

这似乎失败了我约1500页扫描。我知道这没有意义,这只是我的观察。对于删除导入声明抱歉,我认为这会有所帮助(我错了)。我已经在这里上传完整的代码:http://pastebin.com/q9KCrQrL(应该摆脱缩进错误) 至于数据库,它只是一个名为python的本地mysql数据库,用户名为password等于Python。所有的日志文件都应该自动创建(目录也应该,这要感谢你的代码)。我正在追溯错误,所以我仍在努力解决这个问题。 – Brian 2013-02-27 23:24:40

+0

@Brian:没有回溯,很难确定发生了什么......但我的猜测是,递归限制实际上发生在HTML解析器_中。请参阅[文档](http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser)以获取有关不同解析器'bs4'可以使用的详细信息,但是如果您退回默认情况下,特别是在2.7.2/3.1.0或更早的版本上,它在很多方面都很糟糕。当我用2.7.2进行测试时,它在前100个文件中有4个失败(至少有两个不同的错误,这两个错误都不是递归错误)。 – abarnert 2013-02-27 23:36:05

+0

@Brian:这是一个非常快速的测试方法:无论链接失败,将该链接放在开始的'deque'开始处,看它现在是否在第一页而不是第1500页失败。 – abarnert 2013-02-27 23:38:29