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

  • 相关阅读:
    Angular2 组件通信
    vue跨组件通信的几种方法
    Angular React 和 Vue的比较
    vue对比其他框架
    ReactJS 生命周期、数据流与事件
    LeetCode 1089. 复写零(Duplicate Zeros) 72
    LeetCode 421. 数组中两个数的最大异或值(Maximum XOR of Two Numbers in an Array) 71
    12
    11
    10
  • 原文地址:https://www.cnblogs.com/-406454833/p/11440921.html
Copyright © 2020-2023  润新知