if判断, for循环, 爬虫案例

异常处理

报错结构

文件名.py, 行数,

出错行内容

出错类型

异常处理:处理异常(报错,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,撸棒性-->经验搭出来的

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

原文地址:https://www.cnblogs.com/-406454833/p/11440921.html