初始化
介绍
- 今天我们爬的是一个好友关系网。原网站:[http://py4e-data.dr-chuck.net/]
- 我们可以看到的是每个人的好友列表。
- 好友列表里,每个好友都是一个链接。(链接在html里超链接的tag是
a
)
- 我们将从一个叫小F的人开始,查看他前五个好友,再点进去他前五个好友的链接里面找到这五个好友的好友。
- 当我们找到足够多的人后,用networkx制作可视化的graph。
- networkx的documentation文件:https://networkx.github.io/documentation/stable/reference/functions.html
安装包
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
import re
from collections import deque
ctx = ssl.create_default_context()
ctx.check_hostname=False
ctx.verify_mode=ssl.CERT_NONE
通过BFS创建一个Graph
- 创建一个字典
graph
(dictionary)。每个人的名字就是一个key,value是一个list,list包括他所有的好友名字
- 用BFS从root开始traverse,每次只将这个人前五个好友姓名放进我们的queue中
- 只爬k个人。(我这里设置的是20)
- 没有被“爬”到,但是是已经被爬到的人的好友的人,仍然放入我们的graph dictionary中,但是list是empty的。
- 当爬完k个人,break the loop
- 我们最后的graph的长度应该为100.
from collections import deque
graph = {
}
def create_graph(name,level):
search_queue = deque()
search_queue.append(name)
searched = []
counter = 0
while search_queue:
if level == counter:
break
person = search_queue.popleft()
if not person in searched:
person_url = "http://py4e-data.dr-chuck.net/known_by_"+person+".html"