if判斷, for循環, 爬蟲案例

異常處理

報錯結構

文件名.py, 行數,前端

出錯行內容python

出錯類型程序員

異常處理:處理異常(報錯,Error)

# # # 1/0
# x = 10
# y = input('數字:') #輸入字符串類型給y,y被計算機識別爲字符串類型
# y += 10
# print(y + 10)

#異常處理
#語句格式   try: ... except Error: ...
# try:
#     print(1/0) #判斷try至except之間的語句是否出錯,相似於 if ...: else: 雙分支結構
# except ZeroDivisionError:
#     pass
# #如try至except之間的語句沒出錯則正常執行,若是出錯則判斷except後面的錯誤類型,若是符合該錯誤,則執行except冒號後的語句,若是不符合則報錯



# try:
#     dic = {'a': 1}
#     dic['b'] #判斷try至except之間的語句是否出錯,相似於 if ...: else: 雙分支結構
# except ZeroDivisionError:
#     pass
#如try至except之間的語句沒出錯則正常執行,若是出錯則判斷except後面的錯誤類型,若是符合該錯誤,則執行except冒號後的語句,若是不符合則報錯




# try:
#     1/0
#     dic = {'a': 1}
#     dic['b'] #判斷try至except之間的語句是否出錯,相似於 if ...: else: 雙分支結構
# except ZeroDivisionError:
#     print('捕捉到了ZeroDivisionError這個錯誤')
# except KeyError:
#     print('捕捉到了KeyError這個錯誤')
#如try至except之間的語句沒出錯則正常執行,若是出錯則判斷except後面的錯誤類型,若是符合該錯誤,則執行except冒號後的語句,若是不符合則報錯


#輸入函數input的用法
# key = input('輸入一個key獲取字典中的值')
# try:
#     dic = {'a':1}
#     dic[key]
# except KeyError:
#     print('捕捉到了KeyError這個錯誤')

#對於可能多個錯誤的語法結構
# try:
#     key = input('輸入一個key獲取字典中的值')
#     dic = {'a': 1}
#     dic[key]
#     1/0
#     lt=[1, 2, 3]
#     lt['a']
# except Exception as e: #把錯誤信息賦值給變量e,同時通常把該錯誤記錄到日誌中
# logging.info(e) #將e記錄到日誌中,給程序員看
#     print(e)
#     print('你輸入有問題') #給用戶看

#機制:預運行(把代碼抽離到相似另一個文件中運行,這樣的運行對本文件不會形成任何影響),可是這個過程須要消耗時間,通常能不用則不用

用異常處理提高代碼的rubst,擼棒性-->經驗搭出來的json

fi判斷

if通常用於判斷/選擇的場景

單分支

score = 95
if score > 90:
    print('優秀')

雙分支

score = 95
if score > 90:
    print('優秀')
else:
    print('良好')
#三元表達式
print('優秀') if score > 90 else print('良好') #單分支沒有,多分鐘也沒有,只有雙分支有
#結果一 條件 結果二

多分支

if ...: elif ...: elif ...: else:瀏覽器

if ...: if ...: if ...: if服務器

二者之間區別

s = 91
if s > 90:
    print('優秀')
elif s > 60:
    print('良好')
else:
    print('不及格')
    
if s > 90:
    print('優秀')
if s > 60 and s < 90:
    print('良好')
if s < 60:
    print('不及格')

if ...: elif ...: 結構對一個總體順次判斷,後面一步必需要等前面一步結束網絡

if ...: if ...: 結構每次都對同一總體判斷,每次判斷互相獨立異步

例如: s = 91 時if ...: elif ...: 走一次代碼就終止; 而if ...: if ...: 須要走三次;此時if ...: if ...: 結構時間複雜度和空間複雜度都更大.函數

邏輯運算符

>=
not 非

for循環循環用來幹什麼:乾重復的事

for循環工具

debug調試-->點出紅點-->右鍵debug-->右鍵向下箭頭調試每次循環運行的具體數據

爬取豆瓣信息

複習

爬蟲原理

1.發送請求

2.獲取數據

3.解析數據

4.保存數據

requests請求庫

response = requests.get(url='目標網站地址')

response.content #二進制流

response.rext #文本

re正則模塊

data_list = re.findall('正則匹配規則','解析的數據','匹配模式')

貪婪匹配:

.*? #過來任何內容

非貪婪匹配 :

(.*?) #提取內容

with open()

昨日

爬取圖片

爬取視頻

​ 找到視頻或圖片連接

​ res = requests.get(連接地址)

爬取豆瓣電影信息

​ ---url:

​ 解析提取:

​ 電影名稱\電影詳情頁\電影評分\評價人數

今日

爬蟲三部曲

1.發送請求

2.解析數據

3.保存數據

爬蟲精髓

1.分析網站的通訊流程

2.分析查找數據從何而來

3.目標網站的反爬策略

4.根據目標網站的反爬策略編寫攻擊手段,獲取數據.

爬取豆瓣電影top250信息

根據每頁電影url地址規律使用for循環爬取所有top250信息

for i in range(10):
    u = f'https://movie.douban.com/top250?start={num}&filter='
    num += 25

後面代碼總體縮進便可總體放入for循環中

for循環控制爬取豆瓣電影所有top205

複習

爬蟲原理

1.發送請求

2.獲取數據

3.解析數據

4.保存數據

requests請求庫

response = requests.get(url='目標網站地址')

response.content #二進制流

response.rext #文本

re正則模塊

data_list = re.findall('正則匹配規則','解析的數據','匹配模式')

貪婪匹配:

.*? #過來任何內容

非貪婪匹配 :

(.*?) #提取內容

with open()

昨日內容

爬取圖片

爬取視頻

​ 找到視頻或圖片連接

​ res = requests.get(連接地址)

爬取豆瓣電影信息

​ ---url:

​ 解析提取:

​ 電影名稱\電影詳情頁\電影評分\評價人數

今日內容

爬蟲三部曲

1.發送請求

2.解析數據

3.保存數據

爬蟲精髓

1.分析網站的通訊流程

2.分析查找數據從何而來

3.目標網站的反爬策略

4.根據目標網站的反爬策略編寫攻擊手段,獲取數據.

爬取豆瓣電影top250信息

爬取異步請求接口信息

同步異步

同步請求:發送方發送數據包後,等待接收方發回響應以後,才能發送下一個數據包的通訊方式。經過單線程服務,該線程發送請求,在服務器運行時阻塞,而且等待響應。

異步請求:發送方發送數據包後,不用等待接收方發回響應,就能夠發送下一個數據包的通訊方式。經過兩個線程來調用服務,一個線程發送請求,另外一個單獨的線程接收響應。

同步就是你叫我去吃飯,我聽到了就和你去吃飯;若是沒有聽到,你就不停的叫,直到我告訴你聽到了,才一塊兒去吃飯。

異步就是你叫我,而後本身去吃飯,我獲得消息後可能當即走,也可能等到下班纔去吃飯

同步請求在等待響應時不能繼續使用瀏覽器、而異步請求,不用等待響應,可繼續使用瀏覽器。對客戶沒用影響。

分析目標網站的異步請求返回的數據(接口)

F12-->Network(網絡監聽工具)-->刷新頁面(默認獲取的是同步+異步數據)-->點XHR(只獲取異步請求)

異步請求數據

一塊塊小數據(不包含前端代碼),該數據爲字典類型,想批量獲取,分析規律

json

第三方數據格式

json.dumps() #把python數據格式轉成json數據格式

json.loads() #把json數據格式換成python數據格式

爬取黃頁88網手機號

反爬策略:經過User-agent判斷是不是瀏覽器

user agent

用戶代理憑證

以字典形式取出並賦值給request.get函數

相關文章
相關標籤/搜索