if判断
-
单分支
s = 11 if s > 10: print('输入成功')
-
双分支
s = 6 if s > 2: print("大") else: print("小")
-
多分支
s = 100 if s >=90: print("优秀") elif s>=80: print("良好") elif s>=70: print("普通") else: print("差")
for循环
for i in range(101):
if i == 50:
continue
print(i)
for 循环嵌套
for i in range(13):
for j in range (32):
print (f'{i}月{j}日')
爬虫三部曲
1.发送请求
2.解析请求
3.保存数据
爬虫的精髓
1.分析网站的通信流程
2.分析查找数据从何而来
3.分析目标网站的反爬策略
4.根据目标网站的反爬策略编写攻击手段,获取数据
json模块
是一种第三方的数据格式
json.loads() #把json数据转换成python数据格式
json.dumps() #把python数据格式转成json数据格式
获取豆瓣电影
import requests
import re
'''
第一页:
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=225&filter=
'''
# 0 获取所有电影的url
num = 0
for line in range(10):
url = f'https://movie.douban.com/top250?start=(num)&filter=' #0 25 50 75
num += 25
#1.发送请求
response = requests.get(
url=url
)
#获取响应文本
#print(repsonse.text)
'''
1.电影名称
2.电影详情页链接
3.电影评分
4.电影评价人数
'''
#2.解析并提取数据
#查找所有
#re.S:全局查找
#re.findall('正则匹配规则','解析文本',re.S)
#获取所有电影的名称
#move_name = re.findall(<div class="item">.*?<span class="title">(.*?)</span>,reponse.text,re.S)
#获取电影的名称与详情页地址
#move_name = re.findall('<div class="item">.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>', response.text, re.S)
#move_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)
#循环
num = 1
with open('douban.txt','a',encoding='utf-8') as f:
for line in movie_list:
movie_url = line[0]
movie_name = line[1]
movie_point = line[2]
movie_count = line[3]
f.write(movie_erl + '---' + movie_name + '---' + movie_point + '---' + movie_count + '\n')
print('写入数据成功,爬虫程序结束。。。')
import requests
import json
#拼接url
num = 0
for line in range(3):
url = f'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start={num}&limit=20'
num += 20
# print(url)
#1.发送请求
response = requests.get(url=url)
#print(response.text,'=='*100)
#把json数据转成python数据格式
#python_data = json.loads(response.text)
#print(type(python_data))
movie_list = json.loads(response.text)
#循环电影列表数据中的每一个字典
for movie_dic in movie_list:
#print(type(movie_dic))
#2.提取数据
#电影名称,电影评分,电影的排名,图片地址,详情页地址
movie_name = movie_dic['title'
movie_point] = movie_dic['rating'h][0] #["9.1","45"]
movie_rank = movie_dic['ramk']
movie_img_url = movie_dic['cover_url']
movie_url = movie_dic['url']
movie_data = f'''
电影名称:{movie_name}
电影评分:{movie_point}
电影排名:{movie_rank}
图片地址:{movie_img_url}
详情页地址:{movie_url}
'''
print(movie_data)
#3.保存电影数据
with open('douban2.txt','a',encoding='utf-8') as f:
f.write(movie_data)
爬取88黄页手机号码
import requests
import re
# 1.发送请求
# url = 'http://qiche.huangye88.com/diandongqiche/diandonglaoyeche/pn17/'
url = 'http://qiche.huangye88.com/xinxi/s121quumg56853.html'
# 反爬策略,通过User-Agent判断是否是浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response.text)
# 2.解析数据
'''
<ul class="pro">.*?<li><label>手<span class="none">占</span>机</label><h3 class="big">(.*?)</h3></li>.*?</ul>
'''
phone = 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)