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函数

相关文章
相关标签/搜索