Web Scraping爬虫 好友关系网 (1)通过BFS制作图、用Networkx 画可视化图表 关系网

初始化

介绍

  1. 今天我们爬的是一个好友关系网。原网站:[http://py4e-data.dr-chuck.net/]
  2. 我们可以看到的是每个人的好友列表。
  3. 好友列表里,每个好友都是一个链接。(链接在html里超链接的tag是a
  4. 我们将从一个叫小F的人开始,查看他前五个好友,再点进去他前五个好友的链接里面找到这五个好友的好友。
  5. 当我们找到足够多的人后,用networkx制作可视化的graph。
  6. 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

  1. 创建一个字典graph(dictionary)。每个人的名字就是一个key,value是一个list,list包括他所有的好友名字
  2. 用BFS从root开始traverse,每次只将这个人前五个好友姓名放进我们的queue中
  3. 只爬k个人。(我这里设置的是20)
  4. 没有被“爬”到,但是是已经被爬到的人的好友的人,仍然放入我们的graph dictionary中,但是list是empty的。
  5. 当爬完k个人,break the loop
  6. 我们最后的graph的长度应该为100.
from collections import deque



graph = {
   } # 我们的graph


def create_graph(name,level): #name就相当于root 起始人名
    search_queue = deque() # deque是一个数据结构 适用于bfs(dfs用stack)
    search_queue.append(name) # 将我们找到的好友(邻居)都放入这个queue中
    searched = [] # 该数组用于记录检查过的人
    counter = 0 #用于控制我们爬的人数,这里我只爬20人。
    while search_queue: # 只要队列不为空
        if level == counter: #如果到了20人,就自动break
            break
        person = search_queue.popleft() # 就取出其中的第一个人
        if not person in searched: # 仅当这个人没检查过时才检查
            
            person_url = "http://py4e-data.dr-chuck.net/known_by_"+person+".html" #我们的r
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值