if 條件判斷 單分支結構 雙分支結構 多分支結構 for迴圈 迴圈就是重覆做一件事 range(10) 預設從0開始,10結束,預設步長為1,顧頭不顧尾 for 迴圈例子: 註:f 格式化輸出 》》字元串拼接 有了f {}就有了特殊含義 for 迴圈嵌套:內部迴圈完全走完,才會走一次外層迴圈,每次 ...
if 條件判斷
if 條件判斷: # if 條件成立,執行代碼1,條件不成立,執行代碼2
代碼1
else:
代碼2
單分支結構
age = 19
if age >= 18:
print('你已經成年了!')
雙分支結構
# 雙分支結構
age = 19
if age >= 18:
print('成年')
else:
print('未成年')
多分支結構
'''
如果 成績>=90,列印"優秀"
如果 成績>=80 並且 成績<90,列印"良好"
如果 成績>=70 並且 成績<80,列印"普通"
其他情況:列印"差"
'''
score = int(input('請輸入分數:'))
if score >= 90:
print('優秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('普通')
else:
print('差')
for迴圈
迴圈就是重覆做一件事
range(10) 預設從0開始,10結束,預設步長為1,顧頭不顧尾
print(list(range(10)))
# 列印結果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(10): # 把列表內部的值迴圈列印出來 i = 0 , i = 2 。。。。。i = 9
print(i)
for 迴圈例子:
for i in range(32):
print(f'8月{i}日刷牙')
註:f 格式化輸出 》》字元串拼接 有了f {}就有了特殊含義
for 迴圈嵌套:內部迴圈完全走完,才會走一次外層迴圈,每次走入外層迴圈,內層迴圈都會重置
for j in range(1,13): # j =1 # j = 2
for i in range(1, 32): # 控制的是日
print(f'{j}月{i}日刷牙')
- for + break
for i in range(101):
if i == 51:
break # 中斷迴圈
print(i)
# 只列印0-50, 當i = 51時迴圈中斷,跳出本層迴圈
- for + continue
for i in range(101):
if i == 51:
continue # 跳出本次迴圈,不執行本次代碼,進入下次迴圈
print(i)
# 不列印i = 51
for迴圈習題
for i in range(1, 13): # 控制月
for j in range(1,32): # 控制日
if j == 2 and i > 28:
continue
if j in [4, 6, 9, 11] and i > 30:
continue
print(f'{j}月{i}日刷牙')
爬蟲
爬蟲相關知識
爬蟲三部曲:
- 發送請求
- 解析數據
- 保存數據
爬蟲精髓:
- 分析網站的通信流程
- 分析查找數據從何而來
- 分析網站的反爬策略
- 根據網站的反爬策略編寫攻擊手段,獲取數據
爬蟲程式
- 爬取豆瓣電影top250詳情
'''
第一頁:https://movie.douban.com/top250?start=0&filter=
第二頁:https://movie.douban.com/top250?start=25&filter=
第三頁:https://movie.douban.com/top250?start=50&filter=
第四頁:https://movie.douban.com/top250?start=75&filter=
……
第十頁:https://movie.douban.com/top250?start=225&filter=
'''
import requests
import re
# 1. 獲取所有電影信息的url
num = 0
for line in range(10):
url = f'https://movie.douban.com/top250?start={num}&filter='
# print(url)
num += 25
# 2.發起請求
response = requests.get(
url=url
)
# print(response.text)
'''
1.電影名稱
2.電影詳情頁鏈接
3.電影評分
4.電影評價人數
'''
movie_list = re.findall(
'<div class="item">.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)人評價</span>',
response.text, re.S)
count = 1
with open('douban.txt', 'a', encoding='utf8') as f:
for i in movie_list:
movie_url = i[0]
movie_name = i[1]
movie_score = i[2]
movie_count = i[3]
f.write(f'{movie_url},電影名字:{movie_name},評分:{movie_score},評價人數:{movie_count} \n')
print('數據保存成功,爬蟲程式結束!')
- 爬取豆瓣電影介面
分析目標網站的非同步請求返回的數據(介面)
json.loads() 把json數據類型轉化為python數據類型
json.dumps() 把python數據類型轉化為json數據類型
'''
https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20
https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=20&limit=20
https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=40&limit=20
https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=60&limit=20
'''
import requests
import json
# 1.拼接url
num = 0
for i in range(10):
url = f'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start={num}&limit=20'
# print(url)
num += 20
# 2.發送請求
response = requests.get(
url=url
)
# print(response.text)
# 把json數據類型轉化為python數據類型
# python_data = json.loads(response.text)
# print(type(python_data))
movie_list = json.loads(response.text)
# 迴圈電影列表數據中的每一個字典
for movie_dic in movie_list:
# 2. 提取數據 電影名稱,電影評分,電影的排名,圖片地址,詳情頁地址
movie_name = movie_dic['title']
movie_score = movie_dic['rating'][0]
movie_rank = movie_dic['rank']
movie_img_url = movie_dic['cover_url']
movie_url = movie_dic['url']
# 3. 保存數據
movie_data = f'''
電影名稱:{movie_name}
電影評分:{movie_score}
電影排名:{movie_rank}
圖片地址:{movie_img_url}
詳情地址:{movie_url}
'''
with open('豆瓣.txt', 'a', encoding='utf8') as f:
f.write(movie_data)
print('保存數據成功,爬蟲程式結束')
- 爬取中國黃頁手機號信息
import requests
import re
url = 'http://gongcheng.huangye88.com/xinxi/143992399.html'
# User-Agent: 反爬策略,判斷是否為瀏覽器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = requests.get(
url=url,
headers=headers
)
# print(response.text)
phone_number = re.findall('<ul class="pro">.*?<li><label>手<span class="none">占</span>機</label><h3 class="big">(.*?)</h3></li>.*?</ul>',response.text,re.S)[0]
print('手機號:', phone_number)