嗨喽~大家好呀,这里是魔王呐 ❤ ~!

Python 3.8
Pycharm 2021.2
第三方模块
requests >>> pip install requests
tqdm >>> pip install tqdm 简单实现进度条效果
自带模块
os
base64

导入模块
# 数据请求模块 --> 第三方模块 需要安装 pip install requests
import requests
import base64
from pprint import pprint
import os
from tqdm import tqdm
"""
1. 发送请求, 模拟浏览器对url地址发送请求
模拟浏览器: 请求头 headers
字典数据类型, 一定要构建完成键值对
多页数据采集 --> 分析请求url 请求参数变化规律
"""
for page in range(1, 13):
print(f'==================正在采集第{page}页的数据内容==================')
# 请求url地址 <复制>
url = f'https://www.网站.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=1663&tagAll=0&page={page}'
# 模拟伪装 <复制>
headers = {
# User-Agent 用户代理 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
发送请求
调用requests模块里面get请求方法对于url地址发送请求, 并且携带上headers请求头伪装, 最后用自定义变量response接收返回数据
response = requests.get(url=url, headers=headers)
# <Response [200]> 响应对象, 表示请求成功
print(response)
2. 获取数据, 获取服务器返回响应数据
开发者工具 --> response
response.json() 获取响应json字典数据, 返回的数据必须是完整json数据格式
当你遇到 simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
解决方法:
先获取文本数据 response.text
目的看一下我返回数据是什么样子的 <得到数据了呢, 还是得到数据有问题呢>
当你看到返回的数据 getLiveListJsonpCallback(里面字典样子花括号)
把链接里面 Callback参数删掉
3. 解析数据, 提取我们想要的数据内容
主播名字
主播照片url
response.json() --> 字典数据类型
根据键值对取值: 根据冒号左边的内容[键], 提取冒号右边的内容[值]
# for循环遍历, 把列表里面元素一个一个提取出来
for index in response.json()['data']['datas']:
# 提取主播名字
name = index['nick']
# 提取照片
img_url = index['screenshot']
"""
4. 保存数据, 把图片保存本地文件夹
发送请求 img_url , 获取数据 获取二进制数据
response.content 获取响应二进制数据
图片/音频/视频/特定格式文件 ---> 获取二进制数据进行保存
只要可以得到数据, 实现效果, 过程不重要
D:\自游\颜值检测\img\
\ 转义字符 把含有特殊含义字符, 转义成除了字符本身以外, 不含有任何意义
"""
img_content = requests.get(url=img_url, headers=headers).content
# 'img\\'<文件夹> + name<文件名> + '.jpg'<文件后缀> wb 保存方式, 二进制保存
with open('img\\' + name + '.jpg', mode='wb') as f:
f.write(img_content)
print(name, img_url)
效果

# 数据请求模块 --> 第三方模块 需要安装 pip install requests
import requests
import base64
from pprint import pprint
import os
from tqdm import tqdm
def beauty(img):
'''
现成复制的
获取 access_token 值
'''
try:
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = ''
response = requests.get(host)
access_token = response.json()['access_token']
'''
人脸检测与属性分析
'''
# 读取文件内容 照片内容
f = open(f'img\\{img}', mode='rb')
# 读取出来文件 转成 base64 编码格式
img_base64 = base64.b64encode(f.read())
"""
现成API调用代码
"""
request_url = ""
params = {
"image": img_base64, # 需要传递 图片 base64
"image_type": "BASE64",
"face_field": "beauty"
}
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
beauty = response.json()['result']['face_list'][0]['beauty']
return beauty
except:
return '识别失败'
# 读取文件内容 或者 文件名字
lis = []
files = os.listdir('img\\')
print('正在进行颜值检测, 稍后.......')
for file in tqdm(files[100:200]):
num = beauty(file)
if num != '识别失败':
title = file.split('.')[0]
dit = {
'主播': title,
'颜值': num
}
lis.append(dit)
lis.sort(key=lambda x:x['颜值'], reverse=True)
i = 1
for li in lis:
print(f'颜值排名第{i}的是{li["主播"]}, 颜值评分是{li["颜值"]}')
i += 1



首先我们来搜一下第一名,看看长什么样吧

咳咳,那我们在来看一下最后一名,通常第一都是都点迷惑得~

按照的窝得经验之谈,一般七、八十分得长得都是还不错的~
我们来看看吧~










对python感兴趣的小伙伴也可以看一下博主其他相关文章哦~
python小介绍:
python是什么?工作前景如何?怎么算有基础?爬数据违法嘛?。。
python数据分析前景:
用python分析“数据分析”到底值不值得学习,以及学完之后大概能拿到多少工资
python基础自测题:
最后推荐一套Python视频给大家,希望对大家有所帮助:
好了,今天的分享就差不多到这里了!
要成功,先发疯,下定决心往前冲!
学习是需要长期坚持的,一步一个脚印地走向未来!
未来的你一定会感谢今天学习的你。
—— 心灵鸡汤
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI