美文网首页
Python(六十七)正则案例实战

Python(六十七)正则案例实战

作者: Lonelyroots | 来源:发表于2022-02-26 23:18 被阅读0次

    06_正则案例实战/01_正则01.py:

    """
    
        1. re.compile 正则表达式语法
        2. re.search 找一个
        3. re.match 从头找一个,没有返回None
        4. re.findall 找所有 返回列表
    
        .       匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
        *       匹配0个或多个的表达式
        +       匹配1个或多个的表达式
        ?       匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
        []      表示一组字符。
        "|"     A|B,创建一个正则,将匹配A或B
        \       转义
        \s      匹配任何空白字符
        \d      匹配任何数字
    
    """
    import re
    
    # 正则的内容一般是网页,而网页一般是以双引号形式显示,所以我们需要用单引号包裹
    str1 = '<link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="百度搜索1" title="百度搜索2" />'
    
    result1 = re.findall('title="(.*?)"',str1)       # findall返回的是list
    print(result1)       # 打印['百度搜索1', '百度搜索2']   非贪婪模式
    
    result2 = re.findall('title="(.*)"',str1)       # findall返回的是list
    print(result2)       # 打印['百度搜索1" title="百度搜索2']      贪婪模式
    
    result3 = re.findall('<link rel="search" type="application/opensearchdescription\+xml" href="/content-search\.xml" title="(.*?)" title="(.*?)" />',str1)
    print(result3)       # 打印[('百度搜索1', '百度搜索2')]
    
    print('\n')     # 打印换行
    print('\\n')    # 打印\n
    

    06_正则案例实战/02_正则02.py:

    import re
    
    str1 = """
    <html>
        <body>
        <p>python1</p>
        <p>python2</p>
        <p>python3</p>
        <p>python4</p>
        <div>
            Line 1
        </div>
        </body>
    </html>
    """
    result1 = re.findall('<p>(.*?)</p>',str1)
    print(result1)      # 打印['python1', 'python2', 'python3', 'python4']
    
    # 因为<div>Line1</div>之间有换行,所以需要使用re.S方法
    result2 = re.findall('<div>(.*?)</div>',str1,re.S)
    print(result2)      # ['\n        Line 1\n    ']
    
    # 使用了re.S方法以后,有换行符的出现,所以我们需要加[0]
    result3 = re.findall('<div>(.*?)</div>',str1,re.S)[0]
    print(result3)
    
    # 用strip()去掉空格
    result4 = re.findall('<div>(.*?)</div>',str1,re.S)[0].strip()
    print(result4)      # Line 1
    

    06_正则案例实战/03_获取免费代理.py:

    from requests_html import HTMLSession
    import re
    
    session = HTMLSession()
    
    response = session.get(url="https://www.zmhttp.com/")
    # 解决乱码
    response.encoding = response.apparent_encoding
    html = response.text
    
    # list = re.findall('<td><span class="slogan">FREE</span>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>',html,re.S)
    # 推荐写法
    list = re.findall('<td><span class="slogan">FREE</span>(.*?)</td>\s*<td>(.*?)</td>\s*<!--<td>(.*?)</td>-->\s*<td>(.*?)</td>\s*<td>(.*?)</td>\s*<td>(.*?)</td>\s*<td>(.*?)</td>',html,re.S)
    
    print(list)
    # print(html)
    

    06_正则案例实战/04_B站无水印视频提取.py:

    """
    
    思路顺序:
        1.先分析初始页面、源码
        2.如果初始页面没有,name数据肯定存在于XHR或者JS当中
        3.如果2中还是没有,那么数据肯定进行了加密处理,此时就要进行JS破解
        如果页面中有我们想要的数据,那么这个数据肯定以某种方式存在或传递,只不过传递的方法不同
    
    """
    from requests_html import HTMLSession
    import re
    
    session = HTMLSession()
    
    url = "https://m.bilibili.com/video/av628324550?from=search&seid=10458801577147007046&spm_id_from=333.337.0.0"
    headers = {
        'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Mobile Safari/537.36'
    }
    response = session.get(url=url,headers=headers)
    html = response.text
    result = re.findall("readyVideoUrl: '(.*?)'",html)
    # print(result)
    videoUrl = result[0]
    videoTitle = re.findall("<h1>(.*?)</h1>",html)[0]
    video_response = session.get(url=videoUrl,headers=headers)
    with open('./video/{}.mp4'.format(videoTitle),'wb') as fp:
        fp.write(video_response.content)
    print("----{}下载完成!----".format(videoTitle))
    

    06_正则案例实战/05_斗鱼.py:

    import re
    from requests_html import HTMLSession
    
    session = HTMLSession()
    
    url = "https://www.douyu.com/g_LOL"
    response = session.get(url=url)
    html = response.text
    nn_list = re.findall('"nn":"(.*?)"',html)
    print(nn_list)
    # zb_list = re.findall('"nn":"(.*?)","oaid":0,"od":"(.*?)","ol":(.*?),"ot":0,"rgrpt":1,"rid":252140,"rn":"(.*?)"',html)
    # print(zb_list)
    

    文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

    Editor:Lonelyroots

    相关文章

      网友评论

          本文标题:Python(六十七)正则案例实战

          本文链接:https://www.haomeiwen.com/subject/ilmcrrtx.html