【发布时间】:2015-11-15 04:30:07
【问题描述】:
我正在开发一个网络爬虫。爬虫是为具有许多类别的网页而构建的。这些类别可以有子类别,子类别等也是如此。
所以它看起来像这样:
所以我做了一个递归方法,提供深度优先搜索。
def deep_search(url):
if is_leaf(url):
return get_data(url)
for url in get_subcategories(url):
deep_search(url)
此方法工作正常,但需要很长时间才能完成,因此有时会出现连接中断或引发其他错误的情况。
如果发生错误以及下次从该状态继续,您会如何记住状态?
我不能只记住最后一个“url”或类别,因为存在循环并且程序不知道哪些“url”和类别已存储在上层循环中。
【问题讨论】:
-
你确定这还能用吗?如果 url 是叶 url,则在返回数据时,您似乎正在丢弃数据,在行中 -
for url in get_subcategories(url): deep_search(url)。 -
只是想确保您知道Scrapy
-
看看 Scrapy,如果你还没有。
-
@AnandSKumar 这只是伪代码,实际上要困难得多。但是,是的,它有效。问题是如何记住状态。但感谢您的评论。
-
一般情况下,您希望创建一个 url 池来抓取并创建一组工作者(线程),这些工作者(线程)从池中获取 url 进行处理(提取数据并将新的 url 添加到池中,如果有的话)一页)
标签: python loops recursion nested-loops