美文网首页
python实战|爬取1000位小姐姐私房照制作照片墙,刷新你三

python实战|爬取1000位小姐姐私房照制作照片墙,刷新你三

作者: 途途途途 | 来源:发表于2021-08-19 09:20 被阅读0次

    今天给大家介绍python如何爬取虎牙小姐姐并制作心形照片墙,

    有兴趣的小伙伴们一起来看看吧!

    点击进去

    卧槽,这颜值.....

    i了i了

    需求分析

    我们的目标有5个,分别是小姐姐的

    房间名称、封面照片、昵称、头像、直播间当前人数

    网页分析

    浏览器快捷键F12打开开发者模式,可以观察到当前页面120个小姐姐信息都在右边列表里面。

    但是大家可以看看我标红处,这是一个非标准格式的json数据集,

    所以要想获取到小姐姐的信息

    先得获取到标准的数据集 

    发送请求

    url =f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&callback=getLiveListJsonpCallback&page={page}'

    headers = {

    'cookie':'__yamid_tt1=0.17768755672559844; __yamid_new=C9662ED452B00001997340851CC8140B; game_did=j7Os0i0Txedw1cLUtP0vmKnalM1x65kO3rE; SoundValue=0.50; alphaValue=0.80; guid=0a42cb71a121c360e701bcfbbdfb20c9; udb_guiddata=b45f59af594a4e83cde65858; udb_anouid=1461170529732; isInLiveRoom=true; Hm_lvt_51700b6c722f5cf39906a596ea41f=1623400798,1624888823,1624928362; udb_passdata=3; __yasmid=0.17768755672559844; _yasids=__rootsid%3DC96BDFA246600001458617807F641C12; Hm_lpvt_51700b6c722f5bb4cf39906a596ea41f=1624928418; huya_web_rep_cnt=137',

    'referer':'https://www.huya.com/g/2168',

    'user-agent': str(UserAgent().random)

    }

    try:

    resp = requests.get(url, headers = headers)

    print(resp.text)

    去除非必要信息,构造标准json数据集

    text = resp.text[25:-1]# 去除text格式前后无效字符

    json_text = json.loads(text)# 转为标准json格式数据集

    print(json_text)

    接下来我们就可以获取小姐姐信息啦

    room_name = item['roomName']# 房间名称

    cover_link = item['screenshot']# 封面照片

    nick = item['nick']# 昵称

    prof_phot = item['avatar180']# 头像

    view_num = item['totalCount']# 直播间当前人数

    print(room_name, cover_link, nick, prof_phot, view_num)

    多页数据获取

    小姐姐们直播大多集中在晚上,所以晚上爬取的数据有成千个,白天也就几百个,

    不管你想获取多少,一个for循环就搞定啦

    # 获取10页虎牙小姐姐

    forpageinrange(1,10+1)

    url =f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&callback=getLiveListJsonpCallback&page={page}'

    存入Excel

    这里我们使用的是openpyxl来存储在Excel中

    # 创建

    ws = op.Workbook()

    wb = ws.create_sheet(index=0)

    wb.cell(row=1, column=1, value='房间名称')

    wb.cell(row=1, column=2, value='封面照片')

    wb.cell(row=1, column=3, value='昵称')

    wb.cell(row=1, column=4, value='头像')

    wb.cell(row=1, column=5, value='直播间当前人数')

    # ----------------------------------------

    # 存储

    wb.cell(row=count, column=1, value=room_name)

    wb.cell(row=count, column=2, value=cover_link)

    wb.cell(row=count, column=3, value=nick)

    wb.cell(row=count, column=4, value=prof_phot)

    wb.cell(row=count, column=5, value=view_num)

    ws.save('虎牙小姐姐.xlsx')

    下载图片

    重点来了,我要下载小姐姐美照了

    fornum, (pic_img, pic_name)inenumerate(save_pic):

    r = requests.get(pic_img)

    pic = r.content

    try:

    withopen('./pictures/{}.jpg'.format(pic_name),'wb')asfin:

    print(f'正在爬取第{count}张图片')

    fin.write(pic)

    print('{}.jpg----下载成功'.format(pic_name))

    except:

    print('下载失败!')

    然后就是这样

    还有这样

    图片可视化

    这么多好看的小姐姐我要给他们将摆它们成一个心形,这样才能表达我满满的爱意

    # 设置心性图片矩阵

    HEART = [[0,0,1,1,0,0,0,0,1,1,0,0],

    [0,1,1,1,1,0,0,1,1,1,1,0],

    [1,1,1,1,1,1,1,1,1,1,1,1],

    [1,1,1,1,1,1,1,1,1,1,1,1],

    [1,1,1,1,1,1,1,1,1,1,1,1],

    [0,1,1,1,1,1,1,1,1,1,1,0],

    [0,0,1,1,1,1,1,1,1,1,0,0],

    [0,0,0,1,1,1,1,1,1,0,0,0],

    [0,0,0,0,1,1,1,1,0,0,0,0],

    [0,0,0,0,0,1,1,0,0,0,0,0]]

    # 定义相关参数

    SIZE =100# 每张图片的尺寸,越大越清晰

    N =1# 每个点位上放置1*1张图片

    # 计算相关参数

    width = np.shape(HEART)[1] * N * SIZE# 照片墙宽度

    height = np.shape(HEART)[0] * N * SIZE# 照片墙高度

    n_img = np.sum(HEART) * (N **2)# 照片墙需要的照片数

    filenames = random.sample(os.listdir(save_path), n_img)# 随机选取n_img张照片

    filenames = [save_path + fforfinfilenames]

    print('宝宝开始集合!')

    # 绘制爱心墙

    img_bg = Image.new('RGB', (width, height))# 设置照片墙背景

    i =0

    foryinrange(np.shape(HEART)[0]):

    forxinrange(np.shape(HEART)[1]):

    ifHEART[y][x] ==1:# 如果需要填充

    pos_x = x * N * SIZE# 填充起始X坐标位置

    pos_y = y * N * SIZE# 填充起始Y坐标位置

    foryyinrange(N):

    forxxinrange(N):

    img = Image.open(filenames[i])

    img = img.resize((SIZE, SIZE), Image.ANTIALIAS)

    img_bg.paste(img, (pos_x + xx * SIZE, pos_y + yy * SIZE))

    i +=1

    # 保存图片

    img_bg.save('love.jpg')

    print('宝宝集合完毕!')

    相关文章

      网友评论

          本文标题:python实战|爬取1000位小姐姐私房照制作照片墙,刷新你三

          本文链接:https://www.haomeiwen.com/subject/hjsobltx.html