gpt4 book ai didi

python - 如何将其包装成递归调用

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:13 25 4
gpt4 key购买 nike

我正在用 python 写一个小蜘蛛。它点击一个页面,根据模式获取页面上的所有链接,转到每个页面,然后重复。

我需要以某种方式使它递归。以下是网址格式:

www.example.com

然后我根据正则表达式获取所有链接,然后我访问每个页面。

递归部分:

假设我正在访问一个 url 如下的页面:

www.example.com/category/1

现在,如果此页面包含如下链接:

www.example.com/category/1_234

(基本上相同的 url,除了它有一个额外的“_234234”)

我访问那个页面,然后检查一个 url,比如:

www.example.com/category/1_234_4232

(同样,相同的 url 加上下划线和数字)

我一直这样做,直到没有更多符合此模式的链接。

1. visit a category page
2. does it contain links with the same url + "_dddd" if yes, visit that page
3. back to #2 unless no links

我不需要正则表达式,我只需要构造递归调用的帮助。

最佳答案

按照您所要求的方式,只是递归可能不是最好的方法。

一方面,如果要索引的页面超过 1000 个,您可能会“触底”调用堆栈并崩溃。另一方面,如果您在递归期间不小心释放变量,它最终可能会消耗相当多的内存。

我会推荐更多类似的东西:

visit_next = set(['www.example.com'])
visited = set()

while len(visit_next):
next_link = visit_next.pop()
if next_link not in visited:
visited.add(next_link)
for link in find_all_links_from(next_link):
if link not in visited:
visit_next.add(link)

编辑:

按照建议,我用集合重写了这个;这应该使用更少的内存(在长时间的遍历中,visit_next 列表几乎肯定会收集许多重复链接)。

关于python - 如何将其包装成递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com