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}
')
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)