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 是因为效率高!

本文参考内容来自

Selenium官网 SeleniumPython文档

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】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

公众号

赞赏码

关注我,我们一起成长~~

posted @ 2018-07-12 18:45  轻松学编程  阅读(211)  评论(0编辑  收藏  举报