zoukankan      html  css  js  c++  java
  • 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  

    输入结果:

     正则表达式

    每天努力一点点,今天比昨天更进步。
  • 相关阅读:
    JDBC 复习4 批量执行SQL
    JDBC 复习3 存取Oracle大数据 clob blob
    Oracle复习
    Linux命令(1)grep
    JDBC 复习2 存取mysql 大数据
    JDBC 复习1 DBUtil
    php 环境搭建问题
    Windows 批处理 bat 开启 WiFi 菜单选项 设置ID PWD
    Bat 批处理启动和停止Oracle 服务
    docker 学习1 WSL docker ,Windows docker
  • 原文地址:https://www.cnblogs.com/chxb/p/10188593.html
Copyright © 2011-2022 走看看