【发布时间】:2015-01-13 11:23:58
【问题描述】:
我正在编写一个网络爬虫。当它访问一个页面时,它会拉出该页面上的所有链接(满足条件,等等)并将它们添加到要访问的页面队列中。我不希望爬虫两次访问同一页面。我当前的解决方案很笨拙:当访问一个页面时,我将 URL 添加到访问过的页面列表中(因此从队列移动到列表)。然后,当我去访问下一页时,我递归地从队列中“弹出”链接,直到我得到一个不在以前访问过的页面列表中的链接。就像我说的那样,这似乎笨拙且效率低下,必须有更好的方法。
这是我从队列中返回第一个未访问页面的代码:
def first_new_page(queue, visited):
'''
Given a queue and list of visited pages, returns the first unvisited URL in the queue
'''
if queue.empty():
return -1
rv = queue.get()
if rv not in visited:
return rv
else:
return first_new_page(queue, visited)
【问题讨论】:
-
您没有使用
scrapy,这是当今最优秀的 Python 网络爬虫框架,有什么具体原因吗? -
呃,没有充分的理由。事后看来,是的,我可能应该有。在这一点上,我想我会坚持我目前的设置并尝试让它变得更好(它现在可以工作,只是在寻找优化的方法)
标签: python web-scraping beautifulsoup web-crawler