• Python学习笔记


    链接B站,嵩天老师零基础学习视频:https://www.bilibili.com/video/av19391909?p=2

    程序设计语言:编译型,一次性执行结束(c语言)和解释型,逐条执行,便于维护(JavaScript,python等脚本语言)

    拿到一个问题时:

    • 分析问题的计算部分
    • 确定功能,使用IPO方法进一步分析:输入;处理;输出。I(输入input)P(处理process)O(output输出)分析"
    • 设计算法:计算公式
    • 编写程序
    • 运行调试程序

    程序设计的步骤:

    • 确定程序的IPO
    • 编写程序
    • 调试程序

    问题小练习:如何利用温度摄氏度和huashi华氏度进行转换?

    I(输入input)P(处理process)O(output输出)分析;

    设计算法:

    C = (F - 32)/ 1.8

    F = C * 1.8 + 32

    源码如下:

     1 while (True):
     2     content = str(input('请输入当前温度:'))
     3     if content[-1] in ["c","C"]:
     4         huashi = int(content[:-1]) * 1.8 + 32
     5         print("当前温度为摄氏度{a},转化为华氏度{b}".format(a = content,b = str(huashi) + 'F'))
     6     elif content[-1] in ['f','F']:
     7         sheshi = (int(content[:-1])- 32) / 1.8
     8         print('当前温度为华氏度{0},转化为摄氏度{1}'.format(content,str(sheshi) + 'C'))
     9     else:
    10         print('输入有误')

     为了提高学习兴趣,跟着嵩天老师学习了一下turtle库,这个库可以在图形化页面生成图形。

    下面一段是一段生成蟒蛇源码,大家可以自己敲一下,或者直接点击源码顶部按钮,然后复制即可。

    不懂得地方自行百度,搜索能力是必备的。

    下面的源码,利用是函数调用。先调用main(),然后从main()函数里面调用drawSnake()函数,def 是定义函数。里面的参数,嵩天老师都已经讲解,我也注释出来了。至于源码怎么编写的,暂时不需要了解,只要先明白大概源码的作用就OK了。

     1 import turtle
     2 def drawSnake(rad,angle,len,neckrad):
     3     for i in range(len):
     4         turtle.circle(rad,angle)   # rad表示爬行圆形轨迹的半径位置,正值为左,负值为右,angle表示小乌龟爬行的弧度值
     5         turtle.circle(-rad,angle)
     6     turtle.circle(rad,angle/2)
     7     turtle.fd(rad)                      # forward简写,代表爬行的直线距离
     8     turtle.circle(neckrad+1,180)
     9     turtle.fd(rad*2/3)
    10 
    11 def main():
    12     turtle.setup(1300,800,0,0) # 长度,高度,左上角坐标起始点
    13     pythonsize = 60            
    14     turtle.pensize(pythonsize) # 宽度,小乌龟宽度
    15     turtle.pencolor("green")   # 小乌龟走过的轨迹颜色
    16     turtle.seth(-40)           # 小乌龟开始爬行的角度方向,参照数学象限
    17     drawSnake(40,80,5,pythonsize/2) 
    18 main()

    生成结果如下:

    数据类型

    数据类型就不详细介绍了,整型,浮点型,复数型,字符型,文件型,元组,列表,集合,字典等。

    接下来学习数字类型(输一下下面的例子看看结果就知道区别,同时可以用下面的函数方法对其类型转换):

    • 整型 int(4) 转为整数
    • 浮点型 float(4) 转为浮点数
    • 复数型 complex(4) 转换成复数

     转换方法就是:int(),float(),complex()

    运算方法:

    字符串切片索引

    下面一个小练习,最好对应嵩天老师的视频观看,简单的内容就不详述了,看视频了解。

    输入1到7,然后打印出分别对应的星期一到星期日
    下面是本人作出的源码,稍微多加了一点以后要写到的内容,其中包括循环,函数,__main__,__name__方法。不必纠结个别不懂得地方,船到桥下自然直,等你学到这,自然就会了,笔者也是这样过来的。
     1 def cal():
     2     '''
     3     输入1到7,然后打印出分别对应的星期一到星期日
     4     '''
     5     for i in range(20):
     6         content = "星期一星期二星期三星期四星期五星期六星期日"
     7         a = int(input('请输入星期几,输入用1到7数字代表:'))
     8         if a in list(range(1,8)):
     9             index = a * 3
    10             output = content[index-3:index]
    11             print(output)
    12         else:
    13             print("请重新输入")
    14             continue
    15 if __name__ == '__main__':
    16     cal()

     列表的操作

     小游戏,利用turtle库绘制五角星并填充。可以复制这段代码运行一下,同样试着更改一下参数,看看有什么变化。

     1 from turtle import Turtle
     2 p = Turtle()
     3 p.speed(1)
     4 p.pensize(5)
     5 p.color('black','yellow')
     6 p.begin_fill()
     7 for i in range(5):
     8     p.fd(200)
     9     p.right(144)
    10 p.end_fill()

    输出结果:

    词云:如下图所示

    源码如下,尝试手动输出:

    输入前请安装jieba库、wordcloud库、以及scipy库,安装方式pip install 库名

    下面划线的部位根据自己文档和图片,字体的实际路径填写。

    源码:

     1 import jieba
     2 from wordcloud import WordCloud,STOPWORDS
     3 from scipy.misc import imread
     4 import matplotlib.pyplot as plt
     5 # 读取文件
     6 obj_content = open("C:/Users/Desktop/ciyun.txt",'r')
     7 text= obj_content.read()
     8 # 对文本进行分词
     9 cut_text = ''.join(jieba.cut(text))
    10 # 读取图片
    11 picture = imread("C:/Users/Desktop/timg.jpg")
    12 # 导入字体
    13 cloud = WordCloud(font_path = "C:/Users/Desktop/simsun.ttc",
    14                   background_color = 'white',
    15                   mask = picture,
    16                   max_words = 3000,
    17                   max_font_size = 40)
    18 word_cloud = cloud.generate(cut_text)
    19 # 输出图片
    20 plt.axis('off')
    21 plt.imshow(word_cloud) 
    22 plt.show()

    网络爬虫---robots协议

    robots协议就是不被允许的爬虫

    例子:看一下百度的robots协议

    网址:http://www.baidu.com/robots.txt

    User-agent:后面指的被百度禁止的恶意爬虫,

    disallow:后面的是被禁止的通配符类型,最后一个不允许爬虫访问的资源目录

    京东的robots协议,被京东禁止的爬虫。在网址后面加/robots.txt就可以了。https://www.jd.com/robots.txt

    QQ的robots协议https://www.qq.com/robots.txt

    爬取网页源码通用框架:(为防止异常外加try :语句 except:语句)

     1 # 通用爬取网页的代码框架
     2 import requests
     3 def getHtmlText(url):
     4     try:
     5         r = requests.get(url,timeout = 5)
     6         r.raise_for_status() # 如果状态不是200,引发HttpError异常
     7         r.encoding = r.apparent_encoding
     8         return r.text
     9     except :                          # except Exception as e 
    10         return "产生异常"
    11 if __name__ == '__main__':
    12     url = "www.baidu.com"
    13     print(getHtmlText(url))

     实例一:

    爬取京东商城手机信息:https://item.jd.com/5853575.html

    过程如下:

    源码:

     1 # 通用爬取网页的代码框架
     2 import requests
     3 def getHtmlText(url):
     4     try:
     5         r = requests.get(url,timeout = 5)
     6         r.raise_for_status() # 如果状态不是200,引发HttpError异常
     7         r.encoding = r.apparent_encoding
     8         return r.text[:1000]
     9     except :                          # except Exception as e 
    10         return "产生异常"
    11 if __name__ == '__main__':
    12     url = "https://item.jd.com/5853575.html"
    13     print(getHtmlText(url))
    14     

    运行结果和上面截图一样。

      实例二:

    爬取亚马逊商城商品信息:

     1 import requests
     2 url = 'https://www.amazon.cn/dp/B07G5Z9H8R/ref=lp_106200071_1_1?s=pc&ie=UTF8&qid=1546562300&sr=1-1'
     3 try:
     4     kv = {"user_agent":"Mozilla/5.0"}
     5     r = requests.get(url,headers = kv)
     6     r.raise_for_status()
     7     r.encoding = r.apparent_encoding
     8     print(r.text[1000:2000])    # 返回字符串一万多行,截取了一部分字符串
     9 except:
    10     print("异常返回")

    实例三:

    爬取苏宁易购ipad商品信息

     1 import requests
     2 url = 'https://product.suning.com/0000000000/10400501623.html?safp=d488778a.13701.productWrap.1'
     3 # 请求头 模拟浏览器登陆
     4 kv = {"user-agent":"Mozilla/5.0"}
     5 try:
     6     r = requests.get(url,headers = kv)
     7     r.raise_for_status()
     8     r.encoding = r.apparent_encoding
     9     print(r.text[:1000])
    10 except:
    11     print("爬取失败")

     百度搜索关键词借口:https://www.baidu.com/s?wd=keyword

     1 import requests
     2 url = 'http://www.baidu.com/s'
     3 kv = {'wd':"python"}
     4 try:
     5     r = requests.get(url,params = kv)
     6     r.raise_for_status()
     7     r.encoding = r.apparent_encoding
     8     print(r.request.url)
     9     print(len(r.text))
    10 except:
    11     print("爬取失败")
    12     
    13 import requests
    14 url = 'http://www.baidu.com/s'
    15 kv = {'wd':"赵蕴卓"}
    16 try:
    17     r = requests.get(url,params = kv)
    18     r.raise_for_status()
    19     r.encoding = r.apparent_encoding
    20     print(r.request.url)
    21     print(len(r.text))
    22 except:
    23     print("爬取失败")

    搜狗搜索关键字接口:https://www.sogou.com/web?query=keyword

     1 import requests
     2 url = 'http://www.sougou.com/web'
     3 kv = {'query':"python"}
     4 try:
     5     r = requests.get(url,params = kv)
     6     r.raise_for_status()
     7     print(r.request.url)
     8     print(len(r.text))
     9 except:
    10     print('搜索失败')

    360搜索关键词接口:https://www.so.com/s?q=keyword

     1 import requests
     2 url = 'https://www.so.com/s'
     3 kv = {"q":"python"}
     4 try:
     5     r = requests.get(url,params = kv )
     6     r.raise_for_status()
     7     r.encoding = r.apparent_encoding
     8     print(r.request.url)
     9     print(len(r.text))
    10 except:
    11     print('爬取错误')

     爬取网页图片并存储:

     1 import requests
     2 import os
     3 import time
     4 url = 'http://wx1.sinaimg.cn/bmiddle/b4d7da4cly1fdk29b03dwj22c03407wi.jpg'
     5 root = 'D://pics//'
     6 path = root + url.split('/')[-1]
     7 try:
     8     if not os.path.exists(root):
     9         os.mkdir(root)
    10     if not os.path.exists(path):
    11         r = requests.get(url)
    12         with open(path,'wb') as f:
    13             f.write(r.content)
    14             f.close()
    15             time.sleep(3)
    16             print('下载完成')
    17     else:
    18         print("该文件已存在")
    19     
    20 except:
    21     print("爬取失败")

     利用ip138查询接口查询输入ip地址的归属地http://www.ip138.com/

    查看网页的ip地址可以在dos页面输入 ping + 网址(不加http协议) ,例如:ping www.baidu.com

    ip以我校ip地址为例

     1 # 查询ip地址
     2 import requests
     3 url = 'http://www.ip138.com/ips138.asp?ip='
     4 
     5 try:
     6     r = requests.get(url + "60.175.65.100")
     7     r.raise_for_status()
     8     r.encoding = r.apparent_encoding
     9     print(r.text[7100:7400])
    10 except:
    11     print('查询失败')

     BeautifulSoup库---美味汤

    语法两行搞定:

    from bs4 import BeautifulSoup

    soup = BeautifulSoup('<p>data</p>','html.parser'),第二个参数是解析方法

    1 url = 'https://python123.io/ws/demo.html'
    2 import requests
    3 from bs4 import BeautifulSoup
    4 r = requests.get(url)
    5 demo = r.text
    6 soup = BeautifulSoup(demo,'html.parser')
    7 print(soup.prettify())

    案例:最好大学排名 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

    爬取大学排名信息:

    源码如下

     1 import requests
     2 from bs4 import BeautifulSoup
     3 import bs4
     4 def getHtmlText(url):
     5     '''提取html'''
     6     try:
     7         r = requests.get(url,timeout = 30)
     8         r.raise_for_status()
     9         r.encoding = r.apparent_encoding
    10         return r.text
    11     except:
    12         return ""
    13     
    14 def fillUnivList(ulist,html):
    15     '''提取关键信息,填到列表中,这是一个二维列表
    16     列表里面的每一个元素是一个学校信息,每一个元素
    17     仍是一个含有三个元素的列表'''
    18     soup = BeautifulSoup(html,'html.parser')
    19     for tr in soup.find('tbody').children:
    20         if isinstance(tr,bs4.element.Tag):
    21             tds = tr('td')
    22             ulist.append([tds[0].string,tds[1].string,tds[2].string])
    23              
    24             
    25 def printUnivList(ulist,num):
    26     ''''输入表头,和输出排名信息'''
    27     plt = "{0:{3}<10}	{1:{3}^10}	{2:{3}>10}" # ^居中对齐;<左对齐;>右对齐;
    28     print(plt.format('排名','学校','总分',chr(12288))) # chr(12288)中文空格填充,放在对齐符号前面记住就行。
    29     for i in range(num):
    30         u =  ulist[i]
    31         print(plt.format(u[0],u[1],u[2],chr(12288)))
    32     print('Suc' + str(num))
    33 def main():
    34     unifo = []
    35     url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html'
    36     html = getHtmlText(url)
    37     fillUnivList(unifo,html)
    38     printUnivList(unifo,20)
    39 main()
    40  

    输入结果:

     正则表达式

    每天努力一点点,今天比昨天更进步。
  • 相关阅读:
    剑桥雅思写作高分范文ESSAY81
    maven安装配置
    IntelliJ IDEA 2017.3.1安装步骤
    Git基本命令整理
    jacoco覆盖率工具测试及性能分析
    OSGI框架
    查看指定库对应GCC版本
    普元eos、soa、esb
    emp架构
    jar包安装到本地仓库
  • 原文地址:https://www.cnblogs.com/chxb/p/10188593.html
Copyright © 2020-2023  润新知