import re
# 通过正则表达式进行匹配
# 匹配'.',因为'.'是通配符,所有得加转义符'\'
print(re.search(r"\.","I love FishC.com"))
# 可以使用'\d'进行匹配数字,
# 一个\d代表匹配一个数字,多个\d代表匹配多个数字
print(re.search(r"\d\d\d","I love 123 FishC.com"))
print(re.search(r'\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d','192.168.111.123'))
# [aeiou]匹配字符串中第一个出现'aeiou'的字符
print(re.search(r'[aeiou]',"I love 123 FishC.com"))
# [a-zA-Z]匹配字符串中第一个出现字母的字符
print(re.search(r'[a-zA-Z]','I love FishC.com'))
# [0-9]匹配字符串中第一个出现数字的字符
print(re.search(r'[0-9]','I 1 love FishC.com'))
# '3'代表匹配三个b
print(re.search('ab{3}c','abbbc'))
# '{3,10}表示匹配最少三个b,最多10个b'
print(re.search('ab{3,10}','abbb'))
# [01]\d\d|2[0-4]\d|25[0-5] 匹配字符串中值为0到255的数字,如果百位是0或者1则后面可以为任意数字,
# 如果百位是2则后面只能是0-4,如果百位和十位是25则个位一定只能是0-5
print(re.search(r'[01]\d\d|2[0-4]\d|25[0-5]','1'))
# 匹配ip地址,{0,1}表示出现0次或者1次,{3}表示出现三次
print(re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','1.1.1.1'))
# 匹配FishC或则FishD
print(re.search(r'Fish(C|D)',"FishD"))
# 匹配以FishC开始的字符串
print(re.search(r'^FishC','FishC.com!'))
# 匹配以FishC结束的字符串
print(re.search(r'FishC$',"loveFishC"))
print(re.search(r'(FishC)\1','FishCFishCFishC.com'))
# 查找字符中所有的字母字符
print(re.findall(r"[a-z]","FishC.com123"))
# 取反,输出结果是F,C,\n
print(re.findall(r'[^a-z]','FishC.com\n'))
s = "<html><title>I love FishC.com</title></html>"
# <.+>为贪婪模式
print(re.search(r"<.+>",s))
# 非贪婪模式匹配
print(re.search(r"<.+?>",s))
print(re.search(r'(FishC)\060','FishC0'))
# 其中_被认为是字母,\b表示匹配被隔开的字符串,可以用字符或则空格隔开
print(re.findall(r"FishC\b","FishC.com!FishC_com!(FishC)"))
# \B与\b相反
print(re.findall(r"py\B",'py'))
# 编译形式的正则表达式
p = re.compile(r"[A-Z]+")
w = p.findall("I Love FishC")
print(w)
# group()方法
result = re.search(r" (\w+) (\w+)","I love FishC.com")
last_result = result.group()
first_result = result.group(1)
print(first_result)
# \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
print(re.findall("\w",'aaaaa'))
实例版本1:
import urllib.request
import re
def open_https://blog.csdn.net/url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36')
page = urllib.request.urlopen(req)
html = page.read().decode('utf-8')
return html
def get_img(html):
# [^"]表示出去"之外的所有字符串
p = r'<img src="([^"]+\.jpg)'
imglist = re.findall(p,html)
# for each in imglist:
# print(each)
for each in imglist:
filename = each.split('/')[-1]
urllib.request.urlretrieve(each,filename,None)
if __name__ == '__main__':
url = 'https://tieba.baidu.com/f?kw=%C0%EE%D2%E3'
get_img(open_https://blog.csdn.net/url(url))
实例版本2:增加写入相应的文件夹中
import urllib.request
import re
import os
def open_https://blog.csdn.net/url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36')
page = urllib.request.urlopen(req)
html = page.read().decode('utf-8')
return html
def get_img(html,dir_name):
# [^"]表示出去"之外的所有字符串
p = r'<img src="([^"]+\.jpg)'
imglist = re.findall(p,html)
# for each in imglist:
# print(each)
os.mkdir(dir_name)
for each in imglist:
filename = each.split('/')[-1]
work_path=os.path.join(dir_name,filename)
# urlretrieve(url, filename=None, reporthook=None, data=None)
# 参数url:下载链接地址
# 参数filename:指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
# 参数reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,
# 我们可以利用这个回调函数来显示当前的下载进度。
# 参数data:指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,
# filename 表示保存到本地的路径,header表示服务器的响应头
urllib.request.urlretrieve(each,work_path,None)
# urllib.request.urlretrieve(each,filename,None)
if __name__ == '__main__':
url = 'https://tieba.baidu.com/f?kw=%C0%EE%D2%E3'
get_img(open_https://blog.csdn.net/url(url),"tieba_dir")
实例版本3:
import urllib.request
import re
import os
# 读取链接中的内容
def open_https://blog.csdn.net/url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36')
page = urllib.request.urlopen(req)
html = page.read()
# html = page.read()
return html
def get_img(html,dir_name,url):
# [^"]表示出去"之外的所有字符串
p = r'<img src="([^"]+\.jpg)'
# 读取图片地址
html = open_https://blog.csdn.net/url(url)
imglist = re.findall(p,html.decode('utf-8'))
# for each in imglist:
# print(each)
os.mkdir(dir_name)
os.chdir(dir_name)
for each in imglist:
# 下载图片
img = open_url(https://blog.csdn.net/each)
filename = each.split('/')[-1]
# work_path=os.path.join(dir_name,filename)
# wb指以二进制格式打开一个文件只用于写入
with open(filename,'wb') as f:
f.write(img)
f.close()
# urlretrieve(url, filename=None, reporthook=None, data=None)
# 参数url:下载链接地址
# 参数filename:指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
# 参数reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,
# 我们可以利用这个回调函数来显示当前的下载进度。
# 参数data:指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,
# filename 表示保存到本地的路径,header表示服务器的响应头
# urllib.request.urlretrieve(each,work_path,None)
# urllib.request.urlretrieve(each,filename,None)
if __name__ == '__main__':
url = 'https://tieba.baidu.com/f?kw=%C0%EE%D2%E3&fr=ala0&tpl=5'
get_img(open_https://blog.csdn.net/url(url),"tieba_dir",url)
本文深入探讨了正则表达式的应用,从基本语法到高级模式匹配,包括数字、字母、IP地址、特定字符串的匹配,以及如何使用正则表达式进行网页抓取,如抓取贴吧图片,并详细介绍了Python中的re模块用法。
1724

被折叠的 条评论
为什么被折叠?



