python 实现维基百科六度分隔原理

      在本篇文章中,我将创建一个项目来实现维基百科六度分隔理论的查找方法。也就说,我们要实现从埃里克,艾德尔的词条页面(http://en.wikipedia.org/wiki/Eric_Idle)开始,经过最少的链接点击次数找到凯文.贝肯的词条页面(http://en.wikipedia.org/wiki/)。简单的来说,就是实现把两个不相干的主题,用总数不超过六条的主题链接起来。(包括原来的两个)。一句话总结就是万物皆有联系。

实现代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#-*- 作者:jblock -*-
#以下是正则式编写材料:
#他们都在id是bodyConent的div标签里
#url链接下不含冒号
#url链接都是以/wiki/开头
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
random.seed(datetime.datetime.now())
def getlink(articleurl):
	html = urlopen("http://en.wikipedia.org"+articleurl)
	cck = BeautifulSoup(html,"html.parser")
	return cck.find("div",{"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))
links=getlink("/wiki/kevin_Bacon")
while len(links) > 0 :
     newArticle = links[random.randint(0,len(links)-1)].attrs["href"]
     print(newArticle)
     links = getlink(newArticle)

这里实现的只是简单地构建一个从一个页面到另一个页面的爬虫,要解决“维基百科六度分隔理论”问题还有点工作
要做,我们还应该储存url链接数据并分析数据。这里只是做一个简单的尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值