鏈接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}\t{1:{3}^10}\t{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

輸入結果:

正則表達式

