Python多线程和队列操作实例( 二 )


href = https://www.ycpai.cn/python/link.get('href')
if href not in visited:
lock.acquire()
visited.add(href)
lock.release()
q.put(href)
except:
pass
if __name__ == "__main__":
q.put('https://www.baidu.com/')
threads = []
for i in range(10):
t = threading.Thread(target=crawl)
threads.append(t)
t.start()
for t in threads:
t.join()
在这个例子中,我们使用队列来存储待爬取的URL,使用set来存储已经访问过的URL 。我们使用lock来保证多个线程对visited的操作是安全的 。在crawl函数中,我们使用requests库来请求URL并使用BeautifulSoup库来解析HTML 。然后我们使用find_all方法来查找所有的链接,并把它们放入队列中 。如果链接没有访问过,则把它放入visited中 。
【Python多线程和队列操作实例】五、

推荐阅读