之所以称之为爬虫(Web Carwler)是因为它们可以沿着网络爬行。它们的本质就是一种递归方式。为了找到URL链接,它们必须首先获取网页内容,检查这个页面的内容,在寻找另外一个URL,然后后获取URL对应的网页内容,不断循环这一过程。不过要注意的是:你可以这样重复采集网页,但不意味着你一直都应该这么做。当你需要的所有数据都在一个页面上时,前面例子中的爬虫就足以解决问题了。使用网络爬虫的时候,你必须非常谨慎地考虑需要消耗多少网络流量,还要经历思考能不能让采集目标服务器负载更低一些。
在本篇博文中,我们将创建一个项目来实现“维基百科六度分隔理论”的查找方法。也就是说,我们要实现从埃里克.艾德尔的词条页面(https://en.wikipedia.org/wiki/Eric_Idle)开始,经过最少的链接点击找到凯文.贝肯的词条界面(https://en.wikipedia.org/wiki/Kevin_Bacon)。
你应该已经知道如何写一段获取维基百科网站任何页面并提取页面链接的Python代码了:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html=urlopen("https://en.wikipedia.org/wiki/Eric_Idle")
bsObj=BeautifulSoup(html,"html.parser")
for link in bsObj.findAll("a"):
if 'href' in link.attrs:
print(link.attrs['href'])
你