目录
前言
开始
分析(x0)
分析(x1)
采集的Python代码
采集的效果
颜值检测函数构造
facerg.py
排序源码
结果演示
完整的所有源码
视频教程地址
我有话说
大家好,我叫善念。这是连续更新Python爬虫实战案例的第七天,感觉很多的东西不怎么好写,也不知道该写什么案例了。
大家可以反馈给我一下想要采集哪个网站,或者需要post哪些网站的功能,或脚本、或一些基础知识的讲解。
好好写文章,拒绝各种表情包二改别人文章,每一篇都现写的原创干货,没那么多时间去耍嘴皮子逗你们开心。
目标网站:某鱼的颜值主播
好吧,万万没想到还有几个男同胞......
咱们需要的东西就很简单了,采集封面图然后进行颜值检测 ,对检测出来的分数进行排名即可。
简单地查看了一下网页的元素,可以看到咱们需要的图片在li标签的img标签的src属性中。而每一个li标签都包含了一个主播的信息。
我多次讲过像这种图片的加载,极有可能是动态加载,就是当咱们拉动下滑条的时候图片会自动刷新出来,就跟上期的【Python】完美采集某宝数据,到底A和B哪个是YYDS?(附完整源代码和视频教程)是一样的。
那么如何看出来它是否是动态加载的呢?
1.教大家一个可以肉眼可查的方法,那就是直接手动快速拉动浏览器的下滑条,你会发现很多的图片加载需要时间,刚出现的时候是一个白板,然后才加载出图像!
2.那就是直接查看网页元素,如果是动态加载,而咱们的浏览器目前还没有往下面滑,就说明下面的图片肯定是没加载出来的。
那么咱们直接看看后面的li标签中是否有咱们的图片数据:
明显这个图的格式都不一样,是打不开的,也就是个白板图。
好吧那就说明这个又是个动态加载的网站,那么咱们就开始抓包。
刷新一下网页就抓到包了,可以看到这个东西呢它有rs1和rs6两个图,rs1是大图另外一个是小图,想采集哪个都行。我这里采集大图。
分析一下这个请求,是个get请求,说实话我都没想到是get,那么就有点特殊的了,我们前面只分析了网页元素,按道理咱们需要的数据在网页源代码中应该同样有......不过也没关系,自己去看看就好了,也不建议从源代码中去获取数据。
理由就是:可以看到第二页与第一页的网页url是没发生变化的发现没?如果说你从网页源码中去获取,那么你可以获取到第二页的数据,第一页该如何获取呢?所以说千万别从网页源代码中去提取数据。咱们没办法去构造url。
而你如果是包就很容易分析出,只需要把url后面的1改成2就是第二页了,这点敏锐大家还是具备的吧?不相信抓下包就可以了。
是的吧,多页采集的话构造下url即可 。
import requests import jsonpath import os from urllib.request import urlretrieve headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'} if not os.path.exists('./pic'): os.mkdir('./pic') for i in range(1, 100000): try: url = f'https://www.douyu.com/gapi/rknc/directory/yzRec/{i}' r = requests.get(url, headers=headers) names = jsonpath.jsonpath(r.json(), '$..nn') pngs = jsonpath.jsonpath(r.json(), '$..rs1') for name, png in zip(names, pngs): urlretrieve(png, './pic' + '/' + name + '.png') print(names) print(pngs) except: exit()
注册百度智能云:地址
按图去选择咱们需要的服务:
自己看下技术文档:
点击立即使用——创建应用:
正常填写就好
创建好后点击——管理应用
拿到API Key与Secret Key
看下技术文档,开始构建咱们的函数,不做过多讲解
提示:模块的安装
pip install baidu-aip
#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/5/7 23:20 # @Author : 善念 # @Software: PyCharm from aip import AipFace import base64 def face_rg(file_Path): """ 你的 api_id AK SK """ api_id = '你的id' api_key = 'ni de aipkey' secret_key = '你自己的key' client = AipFace(api_id, api_key, secret_key) with open(file_Path, 'rb') as fp: data = base64.b64encode(fp.read()) image = data.decode() imageType = "BASE64" options = {} options["face_field"] = 'beauty' """ 调用人脸检测 """ res = client.detect(image, imageType, options) score = res['result']['face_list'][0]['beauty'] return score
from facerg import face_rg path = r'图片文件夹路径' images = os.listdir(path) print(images) yz = [] yz_dict = {} for image in images: try: name = image[0:-4] score = face_rg(path + '\\' + image) yz_dict[score] = name yz.append(score) except: pass yz.sort(reverse=True) for a, b in enumerate(yz): print('小姐姐的名字是:{}丨颜值名次是:第{}名丨她的颜值分数为:{}'.format(yz_dict[b], a+1, b))
import requests import jsonpath import os from urllib.request import urlretrieve # headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'} # # if not os.path.exists('./pic'): # os.mkdir('./pic') # for i in range(1, 100000): # try: # url = f'https://www.douyu.com/gapi/rknc/directory/yzRec/{i}' # r = requests.get(url, headers=headers) # names = jsonpath.jsonpath(r.json(), '$..nn') # pngs = jsonpath.jsonpath(r.json(), '$..rs1') # for name, png in zip(names, pngs): # urlretrieve(png, './pic' + '/' + name + '.png') # print(names) # print(pngs) # except: # exit() from facerg import face_rg path = r'C:\Users\admin\PycharmProjects\pythonProject\1A演示\斗鱼\pic' images = os.listdir(path) print(images) yz = [] yz_dict = {} for image in images: try: name = image[0:-4] score = face_rg(path + '\\' + image) yz_dict[score] = name yz.append(score) except: pass yz.sort(reverse=True) for a, b in enumerate(yz): print('小姐姐的名字是:{}丨颜值名次是:第{}名丨她的颜值分数为:{}'.format(yz_dict[b], a+1, b))
把facerg.py当成一个自写的模块调用就好了。
——当你毫无保留地信任一个人,最终只会有两种结果。不是生命中的那个人,就是生命中的一堂课。
文章的话是现写的,每篇文章我都会说得很细致,所以花费的时间比较久,一般都是两个小时以上。每一个赞与评论收藏都是我每天更新的动力。
原创不易,再次谢谢大家的支持。
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 学习Python中有不明白推荐加入交流Q群号:928946953 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF! 还有大牛解答!