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) """

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM