zoukankan      html  css  js  c++  java
  • python正则表达式,以及应用[下载图片]

    regular expresion由一系列特定字符及其组合成的字符串,用来对目标字符串进行过滤操作。。

    re相关知识点

    python正则表达式库为re,用import re导入,在然后用re.compile(pattern,flag)将正则表达式字符串编译成正则表达式对象。在利用re提供的内置函数对字符串进行匹配,搜索,替换,切分和分组等操作。

    flag常用的取值:
    re.I 忽略大小写,re.X 忽略空格

    import re
    def check(string):
        p=re.compile("^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$",re.I)
        if p.match(string):
            print("%s符合规则"%string)
        else:
            print("%s不符合规则"%string)
    
    st1='dflx@163.com'
    st2='123456@qq.com'
    check(st1)
    check(st2)
    dflx@163.com符合规则
    123456@qq.com符合规则

    re.match()从起始位置匹配
    re.search()搜索整个字符串匹配,搜索成功返回起始位置和终止位置。
    re.findall()以列表形式返回全部匹配的子串

    >>> print(p.match('dAA00'))
    None
    >>> re.match('adf','sdadfg')
    >>> re.search('adf','sdadfgadf')
    <_sre.SRE_Match object; span=(2, 5), match='adf'>
    >>> re.findall('adf','sdadfgadf')
    ['adf', 'adf']

    切分
    在实际应用中,不同数据源用不同的分隔符,可能是空格,制表符号,逗号等等。 利用正则表达式和split()函数,可以方便的分开。
    re.split(pattern,string[,maxsplit])

    .分隔开

    >>> st='https:\www.baidu.com'
    >>> lt=re.split('.',st)
    >>> lt
    ['https:\www', 'baidu', 'com']

    逗号和空格分隔。

    >>> st='df lx 23,77'
    >>> li=re.split('[s\,]',st)
    >>> li
    ['df', 'lx', '23', '77']

    替换,利用re库中sub()和subn()函数,可以将正则表达式所匹配的内容换成指定的字符串。
    sub()返回的是替换后的字符串
    subn()是以元组类型还回新字符串和替换的次数。

    关键字和谐,re写的还是有点问题

    下载简书交友专题的妹子图片.

    我已经正则表达式,匹配了10篇文章,但是有些没有图片,有些
    图片标签匹配不对,有时间在修改了. 准备遍历整过专题,下载所有图片,嘻嘻,还要判断性别,找出老乡.

    import urllib.request
    import urllib.parse
    import re
    import os
    
    def get_road(url0):
        req=urllib.request.Request(url0)
        req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
                                     '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
        response=urllib.request.urlopen(req)
        html=response.read().decode("utf-8")
        pattern=re.compile(r'<a class="title" target="_blank" href="(.*?)"')
        result=re.findall(pattern,html)
        return result
    
    def get_jiaoyou_url(result,s0):
        s=s0
        return geturl(result,s)
    
    def gethtml(ur):
        url=ur
        req=urllib.request.Request(url)
        req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
                                     '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
        response=urllib.request.urlopen(req)
        html=response.read().decode("utf-8")
        return html
    
    def getpath(html):
        #reg=r'.*?.png'
        reg=r'<img data-original-src="(.*?.png)"'
        imgre=re.compile(reg)
        urls=imgre.findall(html)
        return urls
    
    def  geturl(url,s):
        urls=[s+str(i) for i in url]
        for i in range(len(urls)):
            print(urls[i])
        print("url_length=",len(urls))
        return urls
    
    def download(urls):
        x=10
        print("length=",len(urls))
        for url in urls:
            filename='/home/dflx/下载/jiaoyou_photo/'+str(x)+'.png'
            urllib.request.urlretrieve(url,filename)
            x+=1
        print(x)
    
    def download_all(urls):
        print(len(urls))
        print('---------------')
        index=0
        while index<len(urls):
            print(urls[index])
            #download(urls[index])
            index+=1
            print("********")
    
    def main():
        url0="https://www.jianshu.com/c/bd38bd199ec6"
        #ur='https://www.jianshu.com/p/407dac18983c'
        ur='https://www.jianshu.com/p/189d1b8101e6'
        html=gethtml(ur)
        path=getpath(html)
        urls=geturl(path,'https:')
        download(urls)
    
        """
        result=get_road(url0)
        allurls=get_jiaoyou_url(result,'https://www.jianshu.com')
        download_all(allurls)
    
       """

    下载的图片叉车图片
    图片描述

  • 相关阅读:
    权重平等分布局And TableRow布局误区
    播放视频的框架Vitamio的使用问题
    Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
    使用PullToRefresh实现下拉刷新和上拉加载
    如何安全退出已调用多个Activity的Application?
    Stirng,Stringbuffer,Stringbuild的区别浅淡
    python3 logging
    从集合中筛选数据
    python3 模块
    python3 字符串的 maketrans,translate 方法详解
  • 原文地址:https://www.cnblogs.com/xyou/p/9007248.html
Copyright © 2011-2022 走看看