我正在编写一个python网络爬虫来查找维基百科文章之间的路径。
我有一篇文章和一篇目标文章,我试图找到它们之间的短路径。
现在我基本上只是从开始到目标进行广泛搜索,并使用这样的代码。
for link in to_crawl:
links = get_all_links(source(link), crawled)
if goal in links:
return path+[link]+[goal]
crawled.append(link)
to_crawl.append(links)
如果距离只有几度,它会从一篇文章转到另一篇文章,但我需要一种方法来跟踪我所走的道路。
答案 0 :(得分:0)
所以只需跟踪它。不是拥有链接列表,而是列出link, path
对。像这样:
to_crawl = [(start_page, [])]
for link, path in to_crawl:
links = get_all_links(source(link), crawled)
if goal in links:
return path+[link]+[goal]
crawled.append(link)
to_crawl.extend((new_link, path + [new_link]) for new_link in links)
另请注意,您的现有代码存在严重问题:to_crawl.append(links)
会将链接列表附加为单个链接,显然您希望单独附加该列表中的每个链接。我已经使用extend
确定了这一点。
作为旁注,path+[link]+[goal]
回归是个奇怪的事情。例如,如果您通过路径A-B-C-D从第A页转到第D页,那么您将以B,C,D,C,D作为返回值结束,这至少可以说是奇怪的。如果您需要最后一个链接和目标与路径分开,为什么不只是return path, link, goal
而不是将它们打包到路径上?