python使用matplotlib画图,jieba分词、词云、selenuium、图片、音频、视频、文字识别、人脸识别
一、使用matplotlib画图
关注公众号“轻松学编程”了解更多。
使用matplotlib画柱形图
import matplotlib
from matplotlib import pyplot as plt #数据视图
#配置字体
matplotlib.rcParams["font.sans-serif"] = ["simhei"] # 黑体
matplotlib.rcParams["font.family"] = "sans-serif"
# 画曲线
# 颜色是单词首字母,'r'表示红色
# plt.plot([1,2,4],[2,3,4],'--',color='r')
# plt.xlabel('x')
# plt.ylabel('y轴')
# plt.show()
# 画柱状图
# left, x轴
# height, y轴
# width=0.8, 柱状图大小
plt.bar([1],[2],color='b',label='php',tick_label="php")
plt.bar([2],[23],label='java')
plt.bar([3,4,5],[131,45,123])
plt.title('全国岗位图')
plt.legend()#绘图
plt.show()
# 保存图片,执行下面的语句时,要把plt.show()注释
# plt.savefig('岗位.png')
二、使用jieba分词
导入第三方库:pip install jieba
# 分词
import jieba
str1 = "不一定是骂人!最近大红的综艺节目奔跑吧兄弟里的一句流行语!"
# 分出来的词不包含标点符号
myCut = jieba.cut(str1,cut_all=True)
# <class 'generator'>生成器
print(type(myCut))
print('cut','/'.join(myCut))
# 搜索引擎切割方式,带上标点符号
serchCut = jieba.cut_for_search(str1)
print('serchCut','/'.join(serchCut))
输出:
cut 不一/一定/是/骂人///最近/大红/的/综艺/综艺节目/节目/奔跑/吧/兄弟/里/的/一句/流行/流行语//
serchCut 不/一定/是/骂人/!/最近/大红/的/综艺/节目/综艺节目/奔跑/吧/兄弟/里/的/一句/流行/流行语/!
三、绘制词云
导入第三方模块wordcloud,下载文件wordcloud-1.4.1-cp36-cp36m-win_amd64.whl到项目根目录下,然后pip安装。地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
pip install wordcloud-1.4.1-cp36-cp36m-win_amd64.whl
# 词云模块
import jieba
from wordcloud import WordCloud,STOPWORDS
# 数据视图模块
from matplotlib import pyplot as plt
# 科学计算模块
import numpy as np
# 图片处理
from PIL import Image
# 打开文件
pythoninfo = open('./pythonworkinfo.txt','r',encoding='utf-8',errors='ignore')
pythoninfo = pythoninfo.read()
# 分词
pythoninfoCut = jieba.cut(pythoninfo,cut_all=True)
# 把生成器join成字符串
pythoninfo = ' '.join(pythoninfoCut)
# print(pythoninfo)
#提取背景色,格式化成数组[] RGB
bgcolor = np.array(Image.open('./bg.jpg'))
# print(bgcolor)
myWordCloud = WordCloud(font_path='simkai.ttf', # 中文字体库
width=400, height=200, # 宽,高
mask=bgcolor, # 字体颜色
scale=1, # 缩放
max_words=200, # 最大字数
min_font_size=4, # 最小字体大小
stopwords=STOPWORDS, # 终止词
random_state=90, # 随机状态,单位°
background_color='white', # 背景颜色
max_font_size=200, # 最大字体大小
).generate(pythoninfo) # 生成词云
# 绘制词云,带坐标
# plt.imshow(myWordCloud)
# plt.show()
# 绘制词云,不带坐标
plt.figimage(myWordCloud)
# plt.show()
# 保存
plt.savefig('python岗位.png')
四、Python+Selenium+PhantomJS 获取源码
1、简介
Selenium 是自动化测试工具,支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。即Selenium支持这些浏览器驱动。Selenium支持多种语言开发,比如Python, Java,C,Ruby等。
PhantomJS是一个无界面浏览器,用来渲染解析JS。
安装 Python 的 Selenium 库,再安装好 PhantomJS,就可以实现 Python+Selenium+PhantomJS 的无缝对接!PhantomJS 用来渲染解析JS,Selenium 用来驱动以及与 Python 的对接,Python 进行后期的处理!
直接用用一个没界面的 PhantomJS 是因为效率高!
本文参考内容来自
2、安装Selenium
2.1 安装Webdriver启动
谷歌浏览器打开http://chromedriver.storage.googleapis.com/index.html
在谷歌浏览器中找到当前版本号,在连接中中找到适合的驱动下载。
(64版本以上的一般选择2.40)
######2.2 安装Selenium 库
pip install selenium
2.3 测试驱动是否可用
from selenium import webdriver
# executable_path 驱动路径
driver = webdriver.Chrome(executable_path=r"D:\ruanjian\Anaconda\chromedriver.exe")
#打开网页
driver.get("http://www.baidu.com")
#html源码
html = driver.page_source
print(html)
如果有输出,且能打开谷歌浏览器,那么驱动是正常的,否则有可能是驱动版本不对。
#####3、查找元素、点击、下拉条
from selenium import webdriver
# executable_path 驱动路径
driver = webdriver.Chrome(executable_path=r"D:\ruanjian\Anaconda\chromedriver.exe")
#打开网页
driver.get("https://tieba.baidu.com/")
#html源码
html = driver.page_source
# 查找元素 通过name属性查找元素
# driver.find_element(by='name')
kw = driver.find_element_by_name('kw1')
print(kw)
# 清空
kw.clear()
# 在搜索框输入
kw.send_keys("世界杯")
# 点击
driver.find_element_by_xpath('//*[@id="tb_header_search_form"]/span[1]/a').click()
# 访问微博
driver.get('https://weibo.com/')
# 模拟下拉条
while True:
for _ in range(2):
driver.execute_script('window.scrollBy(0, 1000)')
time.sleep(3)
driver.execute_script('window.scrollBy(0, document.documentElement.scrollHeight)')
break
print(driver.page_source)
# driver.close() # 关闭父类
driver.quit() # 释放内存,全部关闭
#####4、 登录,获取cookie
import time
from selenium import webdriver
import requests
driver = webdriver.Chrome()
# 打开知乎
driver.get('https://www.zhihu.com/')
# 按F12查找“登录”按钮,右键copy,选择copy xpath
# 模拟点击
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div[2]/div/div/div/div[1]/div/div[1]/div[2]/button[1]').click()
time.sleep(2)
# 自动输入账号和密码
username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')
username.send_keys('账号')
password.send_keys('密码')
time.sleep(5)
# 模拟点击登录操作
driver.find_element_by_xpath('/html/body/div[5]/div/span/div/div[2]/div/div/div/div[2]/div[1]/form/button').click()
time.sleep(2)
# 获取cookie
cookies = driver.get_cookies()
print('=========================',cookies,'=========================')
# 关闭
driver.quit()
# 通过session保存cookie
session = requests.session()
for cookie in cookies:
# 使用登录后的cookie
session.cookies.set(cookie['name'], cookie['value'])
# 使用get
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
response = session.get("https://www.zhihu.com/people/zuo-zai-fen-tou-diao-xi-gui-82/activities", headers=headers)
print(response.text)
#####5、 使用headless无界面获取源码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# driver = webdriver.PhantomJS() # 已经停止研发,不建议这样用
chrome_options = Options()
# 使用代理
chrome_options.add_argument('--proxy-server=http://10.3.137.173:808')
# 使用headless,获取源码时不显示浏览器界面
chrome_options.add_argument('--headless')
# chrome_options.add_argument('--disable-gpu') # 禁用gpu
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://www.baidu.com/")
# driver.get('https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_7670467959535191418%22%7D&n_type=0&p_from=1')
print(driver.page_source)
driver.quit()
####五、获取斗鱼图片
流程:a.设置请求头 b.获取响应 c.创建xml树形结构对象 d.通过xpath匹配图片
e.获取图片列表 f.循环列表,获取图片信息,保存图片
#多线程获取斗鱼图片
import time
import urllib.request
import lxml
from lxml import etree
import requests
# 线程池
from concurrent.futures import ThreadPoolExecutor
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/67.0.3396.99 Safari/537.36'}
def getImg():
'''
获取图片信息
:return: dict {"图片标题":"图片链接"}
'''
# 获取响应
url ="https://www.douyu.com/directory/game/yz"
response = requests.get(url,headers=headers).text
print(response)
# 创建xml树形结构对象
mytree = lxml.etree.HTML(response)
# 通过xpath匹配图片 获取图片列表
mzList =mytree.xpath('//ul[@id="live-list-contentbox"]/li')
imgDict = {}
for mz in mzList:
mzImgurl = mz.xpath('.//img/@data-original')[0]
alt = mz.xpath('.//img/@alt')[0][:-3]
imgDict[alt] = mzImgurl
return imgDict
# print(mzImgurl,alt)
def downloadImg(imgUrl,alt):
'''
下载保存图片
:param imgUrl: 图片链接
:param alt: 图片标题
:return:
'''
# 获取图片保存图片 方式1:
# imgResponse = requests.get(imgUrl,headers=headers).content
# print(imgResponse)
#
# with open('./imgs/'+alt+'.jpg','wb') as f:
# f.write(imgResponse)
# f.flush()
# 保存图片 方式2:
urllib.request.urlretrieve(imgUrl,'./imgs/'+alt+'.jpg')
if __name__ == '__main__':
imgDict = getImg()
time.clock()
with ThreadPoolExecutor(5)as exet:
for alt,imgUrl in imgDict.items():
exet.submit(downloadImg,imgUrl,alt)
print(time.clock())
六、获取音频
获取喜马拉雅中的评书《牧羊少年的奇幻之旅》音频:
import math
import time
import requests
import urllib.request
from concurrent.futures import ThreadPoolExecutor
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
def getPageNum(url):
'''
获取页面数量
:return:
'''
response = requests.get(url, headers=headers)
data = response.json()
# 总数
totalNum = data['data']['trackTotalCount']
print(totalNum)
pageNum = math.ceil(int(totalNum) / 30)
return pageNum
def getAudio(pageNum):
'''
获取音频
:return: dict {'trackName':'audioSrc'}
'''
audioDict = {}
for i in range(1,pageNum+1):
#设置url
url = "https://www.ximalaya.com/revision/play/album?albumId=5721805&pageNum=%d&sort=-1&pageSize=30" %i
response = requests.get(url,headers=headers)
audios = response.json()
# print(audios)
audioList = audios['data']['tracksAudioPlay']
for audio in audioList:
# 回合
trackName = audio['trackName']
# src
audioSrc = audio['src']
# print(trackName, audioSrc)
audioDict[trackName] = audioSrc
return audioDict
def downloadAudio(trackName,audioSrc):
urllib.request.urlretrieve(audioSrc, './audios/' + trackName + ".m4a")
if __name__ == '__main__':
url = "https://www.ximalaya.com/revision/album/getTracksList?albumId=5721805&pageNum=1"
pageNum = getPageNum(url)
print('一共要下载%d页数据'%pageNum)
# 保存
audioDict = getAudio(pageNum)
# print(audioDict)
time.clock()
with ThreadPoolExecutor(5) as exet:
for trackName,audioSrc in audioDict.items():
exet.submit(downloadAudio,trackName,audioSrc)
print(time.clock())
####七、获取视频
#导入第三方库
pip install you-get
#打开命令终端,输入
you-get 视频url
####八、调用百度AI接口实现文字识别
在百度AI上创建文字识别应用:https://login.bce.baidu.com/?account=&redirect=http
from aip import AipOcr
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
#图片
image = get_file_content('1.png')
""" 调用通用文字识别, 图片参数为本地图片 """
""" 调用通用文字识别(高精度版) """
ret = client.basicAccurate(image)
# print(ret)
for r in ret['words_result']:
print(r["words"])
图片:
输出:
登高
【作者】杜甫
【朝代】唐
风急天高猿啸哀,渚清沙白鸟飞回。
无边落木萧萧下,不尽长江滚滚来。
万里悲秋常作客,百年多病独登台。
艰难苦恨繁霜鬓,潦倒新停浊酒杯。
####九、调用百度AI接口实现人脸识别
import urllib.request
import base64
import urllib.request
import urllib.parse
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的 Api Key】&client_secret=【你的 Secret Key】'
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
# 获取token
response = urllib.request.urlopen(request)
content = response.read()
# 把content转化成字典
at = eval(content)
'''
人脸探测
'''
request_url = "https://aip.baidubce.com/rest/2.0/face/v1/detect"
# 二进制方式打开图片文件
f = open('dd.jpg', 'rb')
img = base64.b64encode(f.read())
params = {"face_fields":"age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities","image":img,"max_face_num":5}
params = urllib.parse.urlencode(params).encode('utf-8')
access_token = at["access_token"]
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
if content:
print(content)
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号
关注我,我们一起成长~~