我正在编写一个网络爬虫,最终目标是创建一个显示爬虫路径的地图。虽然我不知道其他更好的爬虫每分钟能够下载多少页面,但我的爬虫速度约为每分钟2,000页。
该爬虫使用递归回溯算法,我将其限制在15层深度。此外,为了防止爬虫无休止地重复访问页面,它会将已访问页面的URL存储在列表中,并检查该列表以获取下一个候选URL。
该爬虫使用递归回溯算法,我将其限制在15层深度。此外,为了防止爬虫无休止地重复访问页面,它会将已访问页面的URL存储在列表中,并检查该列表以获取下一个候选URL。
for href in tempUrl:
...
if href not in urls:
collect(href,parent,depth+1)
当爬取了大约30万页时,这种方法似乎会变成一个问题。此时平均每分钟爬虫的页面数量为500个。
我的问题是,有没有另一种方法可以实现相同的功能并提高效率。
我曾经想过减小每个条目的大小可能会有所帮助,因此,我附加了每个URL的前2个和最后2个字符作为字符串,而不是整个URL。然而,这并没有起到作用。
是否有一种方法可以使用集合或其他方法来完成这个任务?
感谢您的帮助。
编辑:顺便说一下,我的程序尚未多线程化。我想在学习线程之前解决这个瓶颈问题。