python学习第三天

今天是学习python第三天,接着昨天来学习。

对分析的数据进行可视化表示--绘制曲线图
from matplotlib import pyplot as plt       # 名字来源于MATLAB
plt.rcParams["font.sans-serif"] = ['SimHei']         #这句和下句是导入字体 按格式写就行
plt.rcParams['axes.unicode_minus'] = False
import numpy as np
#绘制正弦曲线
# [0-2pi]闭区间等间距的100个点
x = np.linspace(0, 2*np.pi, num=100)
print(x)

siny = np.sin(x)        
cosy = np.cos(x)
plt.xlabel('时间(s)')        #x轴描述
plt.ylabel('电压(V)')        #y轴描述
plt.title('时间与电压的关系')            #题头
plt.plot(x, siny, label='sin(x)')              #具体都有啥参数可以按ctrl+鼠标箭头指向plot
plt.plot(x, cosy, color='g', linestyle='--', marker='+', label='cos(x)')     #label标签   marker标识       color  线颜色      linestyle线风格
plt.legend()   #描述线分别 代表啥意思
plt.show()
对分析的数据进行可视化表示--绘制饼图
from matplotlib import pyplot as plt       # 名字来源于MATLAB
plt.rcParams["font.sans-serif"] = ['SimHei']         #这句和下句是导入字体 按格式写就行
plt.rcParams['axes.unicode_minus'] = False
from random import randint
import string
counts = [randint(3500, 40000)for i in range(5)]
print(counts)
labels =['员工{}'.format(i) for i in string.ascii_uppercase[:5]]      #上节讲过哒
print(labels)
explode = [0.1, 0, 0, 0, 0]  #将第一个凸显出来  间距是0.1   其余是0
colors=['red', 'yellow', 'blue', 'purple', 'green']              #将每个自定义颜色
plt.pie(counts, explode=explode, labels=labels, shadow=True,
        colors=colors, autopct='%1.1f%%')          #一些属性,还是可以ctrl+鼠标光标指向看具体参数    具体看图对比     shadow影子      autopct占百分比
plt.axis('equal')     #轴位置
plt.legend(loc=2)#描述每个颜色分别 代表啥意思
plt.title('员工工资图')
plt.show()
对分析的数据进行可视化表示--绘制散点图
from matplotlib import pyplot as plt       # 名字来源于MATLAB
plt.rcParams["font.sans-serif"] = ['SimHei']         #这句和下句是导入字体 按格式写就行
plt.rcParams['axes.unicode_minus'] = False
import numpy as np
x = np.random.normal(0, 1, 10000)#随机点10000个
y = np.random.normal(0, 1, 10000)
plt.scatter(x, y,alpha=0.1)  #alpha透明度
plt.show()

11. 字典解析和集合解析

字典解析

和列表推导式很像

from random import randint
from matplotlib import pyplot as plt
stu_grade = {'student{}'.format(i): randint(30, 100) for i in range(1, 10)}   #随机产生10个学生成绩   字典
for k, v in stu_grade.items():
    print(k, v)   #打印

# 筛选及格学生
res_dict = {k:v for k, v in stu_grade.items() if v > 60}
for k, v in res_dict.items():
    print(k, v)

几何解析

set = {randint(50, 100) for i in range(1, 20)}   #随机产生50-100区间的20个数
print(set)

# 筛选出能被三整除的
res = {x for x in set if x % 3 == 0}
for x in res:
    print(x)

我们第一部分python的基础知识就到这里了,我们下面讲的是专项知识,也会持续更新,希望小伙伴们坚持住哦。

第二部分 python爬虫

1.html

这是一种超文本标记语言,“超文本”就是指页面内可以包含图片、连接,甚至音乐、程序等非文字元素。包括“头”部(head)、和“主体”部分(body),“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。
网页前端用到的技术#前端技术 html + css + javascript
先写一个HTML file ,命名为'index0.html', 代码如下 我们在代码中注释

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的王者荣耀</title>


</head>
<body>
<h1>欢迎来到王者荣耀</h1>
<!--有序列表ol-->
<ol>
    <li>猪八戒</li>
<!--     src="" alt="" 都是 img这个标签的属性       俩箭号之间是内容          -->
    <li><a href="https://pvp.qq.com/web201605/herodetail/513.shtml"><img src="waner.jpg" alt="">上官婉儿</a></li>     
    <li>虞姬</li>
    <li>典韦</li>
</ol>
<!-- div可能有很多  给他命个名字id  , id是唯一的 -->
<div id="header" style="background-color: aquamarine" >
<!--    ul是无需序列-->
    <ul>
        <li>曹操</li>
        <li>吕布</li>
        <li>安琪拉</li>
    </ul>
</div>

<!--div + css盒子模型-->
<!--div是无色无味的容器 ,         class不一定唯一-->
<div class="div-top" >这是div标签</div>
<div id="container">
    <p>上官婉儿选择一个点,然后以自己的位置为终点进行书写,落笔的一瞬间对触碰的敌人造成150/180/210/240/270/300(+20%法术加成)点法术伤害,书写过程中将会对触碰敌人造成300/360/420/480/540/600(+40%法术加成)点法术伤害和50%减速持续2秒(每12秒储存一次笔势,最多可储备2次)</p>
    <a href="http://www.baidu.com">点击跳转至百度</a>
</div>



</body>
</html>

2.开爬

  • 爬取本地网页(上面的)

要将上述html放到工程文件夹下

from lxml import html, etree   #导入这俩库
#使用xpath , bs4 ,css选择器,正则表达式   我们选择用xpath
#使用xpath    爬本地html页面
with open('index0.html', 'r', encoding='utf-8') as f:      #读取
    html_data = f.read()
    # print(html_data)    #打印
#使用xpath提取
    seletor = html.fromstring(html_data)
    print(seletor)
    #   / 代表从根目录出发     text()添加到末尾代表获取标签内容
    h1 = seletor.xpath('/html/body/h1/text()')
    if len(h1) == 0:           #如果不写这个判断h1==0时会报错  防止没爬到东西的不必要报错
        h1 = ''
    else:
        h1[0]
    print(h1)

# if else 三元表达式形式                          #跟上式一个意思,可进行简化
#series_number = ['a']
#if len(series_number) == 0:
#    series_number = ''
#else:
#    series_number = series_number[0]
#print(series_number)

series_number = '' if len(series_number) == 0 else series_number[0]
print(series_number)



    #获取a标签的内容
    #    //从任意节点出发
    #    //标签名1[@属性='属性值']/标签名[@属性='属性值'].../text()
    a = seletor.xpath('//div[@id="container"]/a/text()')[0]  #写[0]是啥意思,我们爬到的东西是以列表的形式给出,[0]是去掉列表
    print(a)
    ul_list = seletor.xpath('//ul/li')
    print(len(ul_list))
    for li in ul_list:
        hero = li.xpath('./text()')[0]
        print(hero)

    #获取上官婉儿 a 标签的href属性
    a = seletor.xpath('//ol/li[2]/a/@href')          # li可能有多个,li查数时从1开始查数
    print(a[0])


    a = seletor.xpath('//div[@id="container"]/a/@href')
    print(a[0])

3.resquests库

import requests
response = requests.get('https://www.baidu.com')
# 查看编码方式
print(response.encoding)
# 修改编码方式
response.encoding = 'utf-8'
# 获取 str类型的响应
html_data = response.text
# bytes获取 bytes类型的响应
bytes_data = response.content
# 修改content的编码方式
response.content.decode('utf-8')
print(bytes_data)
print(html_data)
# 获取响应状态码   200 正常
print(response.status_code)
# 请求头信息
print(response.headers)

with open('baidu.html', 'w', encoding='utf-8') as f:        #写出一个baidu.html的文件
    f.write(html_data)
print(response)

有些网站会设置反爬系统,当他检测出在获取它的信息不是本公司的信息时就会不会给你正确响应,进而让你爬不到东西,这时我们可以设置请求头来爬取,就能成功获取响应,这里拿出个例子:

import requests
#没有添加请求头的知乎   返回400
resp = requests.get('http://www.zhihu.com')
print(resp.status_code)
import requests
#有添加请求头的知乎   返回200
#定义请求头   以字典的形式定义

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)         #知乎主界面-F12-Network-All-刷新-任意选一个200的-单击左键-Herder-拉到下面有个User-Agent'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}   
resp = requests.get('http://www.zhihu.com/', headers=headers)    #
print(resp.status_code)

# User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36

再介绍下使用requests库爬取图片

import requests
# 爬个美丽的紫霞吧
img_urls ='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1564031005586&di=f056da9c16d8a15d74335877a9cb04dd&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201702%2F10%2F20170210221154_vCVyn.jpeg'
resp = requests.get(img_urls)
img = resp.content
# w写  b 二进制
with open('zixia.png', 'wb') as f:
    f.write(img)

4. 爬取豆瓣网视频top250信息

还是爬豆瓣top250,再将每个电影的宣传图片下载到一个文件夹里,这用到了上面刚说到的技术。重要注释放在了程序里。

import requests
from lxml import etree
import pandas as pd
def parse():
    """豆瓣网top250爬虫"""



    # 珍惜运行次数,人家后台也是有检测的   爬虫速度太快人家知道不是人去复制粘贴的   可能封你ip   你就进不去了
    # 设请求头,
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}
    # 定义一个字典  把每个电影的数据放到一块
    movie_info_list = []

    # 循环每一页
    # 1、获取url地址
    for i in range(0, 226, 25):
        url = 'https://movie.douban.com/top250?start={}&filter='.format(i)
        # print(url)
        # 获取 byte的类型的响应
        resp = requests.get(url, headers=headers)
        data = resp.content
        # 调用etree.HTML获取html对象,然后调用html的xpath语法
        html = etree.HTML(data)
        movie_list = html.xpath('//div[@id="content"]//ol/li')
        # print(len(movie_list))
        # 循环爬取每个电影   其格式按道理是相同的   要不然豆瓣程序师得累死
        for movie in movie_list:
            # 获取电影序号
            serial_number = movie.xpath('./div[@class="item"]/div[@class="pic"]/em/text()')
            serial_number = '' if len(serial_number) == 0 else serial_number[0]
            # print(serial_number)
            # 获取电影名字          ./div/div[2]/div[1]/a/span[1]
            movie_name = movie.xpath('./div[@class="item"]/div[@class="info"]/div[@class="hd"]/a/span[1]/text()')
            movie_name = '' if len(movie_name) == 0 else movie_name[0]
            # print(movie_name)
            # # 获取电影介绍
            introduce = movie.xpath('./div[@class="item"]/div[@class="info"]/div[@class="bd"]/p[1]/text()')
            introduce = '' if len(introduce) == 0 else introduce[0]
            introduce = introduce.strip()
            # print(introduce)
            # # 获取电影星级
            star = movie.xpath(
                './div[@class="item"]/div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[2]/text()')
            star = '' if len(star) == 0 else star[0]
            # print(star)
            # 获取电影的评价
            evalute = movie.xpath(
                './div[@class="item"]/div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[4]/text()')

            evalute = '人评价' if len(evalute) == 0 else evalute[0]
            evalute = evalute.replace('人评价', '')
            # print(evalute)
            # 获取电影的描述
            describe = movie.xpath('./div[@class="item"]/div[@class="info"]/div[@class="bd"]/p[2]/span/text()')
            describe = '' if len(describe) == 0 else describe[0]
            # print(describe)

            # 详情链接地址
            link = movie.xpath('./div[@class="item"]/div[@class="pic"]/a/@href')
            link = '' if len(link) == 0 else link[0]
            # print(link)

            # 图片地址

            photo = movie.xpath('./div[@class="item"]/div[@class="pic"]/a/img/@src')
            photo = '' if len(photo) == 0 else photo[0]
            # print(photo)

            # 往字典里添加元素
            movie_info_list.append({
                'serial_number': serial_number,
                'movie_name': movie_name,
                'introduce': introduce,
                'star': star,
                'evalute': evalute,
                'describe': describe,
                'link': link,
                'photo': photo

            })
    # 遍历字典
    for movie_info in movie_info_list:
        print(movie_info)
        resp = requests.get(movie_info['photo'])
        if resp.status_code == 200:
            # 执行图片写入操作
            # 参考图片命名格式 0000001.jpg
            img_name = '000000{}.jpg'.format(movie_info['serial_number'])
            with open('./imgs/{}'.format(img_name), 'wb') as f:
                f.write(resp.content)

    # 存储成csv   调用panda库:
    df = pd.DataFrame(movie_info_list)
    df.to_csv('douban_top250_info.csv')

parse()

运行一下,你就看到震撼的一幕了,我们想看的信息都在这上面呢
今天分享的就到这里了,明天见。piupiupiu。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 可视化 绘制正弦余弦曲线 案例: 输出结果: 饼状图 案例: 输出结果: 散点图 案例: 输出结果: 字典解析 和...
    乡村蝙蝠侠阅读 341评论 0 0
  • 字典:当索引不好用时 字典是一种通过名字引用值的数据结构。这种结构类型称为映射。字典是Python中唯一內建的映射...
    mydre阅读 499评论 0 0
  • 1、内存回收机制: 在其他语言中需要考虑内存回收机制,垃圾数据太多会导致内存溢出。但是python语言无需考虑这点...
    顾开阅读 67评论 0 0
  • python 语法,变量熟悉了一些,但是还是得多写代码,不然根本不能熟练使用python写代码。 python 中...
    幸福晓杰2016阅读 232评论 0 0
  • 好像只有东方人对石头有一种超乎寻常的热爱! “和氏璧”不用说,古诗中也有“望夫处,江悠悠,化为石,不回头。”有名的...
    切角专栏阅读 468评论 1 0