Python爬虫抓取图片(re模块处理正则表达式)
import os.path import re import requests if __name__ == '__main__': # 如果不存在该文件夹则进行创建 if not os.path.exists('./saimenshibo'): os.mkdir('./saimenshibo') url = 'https://www.symansbon.cn/product_ajax.aspx' header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36' } # 抓取前四页的图片数据 for i in range(1, 5): param = { 't': '10', 'page': i, 'pid': '27', '_': '1666084852813' } # 得到页面源码 page = requests.get(url=url, params=param, headers=header).text # 正则匹配它的src () => 匹配括号内的表达式 .*? => 惰性匹配 ex = '<li>.*?<figure>.*?<img src="(.*?)" alt.*?</li>' # 获取到图片所有的url地址 img_list = re.findall(ex, page, re.S) for img in img_list: if not str(img).startswith('https:'): # 获取完整URL img_src = 'https://www.symansbon.cn/' + img else: img_src = img # 根据url下载图片 .content 获取二进制数据 img_data = requests.get(url=img_src, headers=header).content # img_src='Uploadfiles/Picture/2022-8-5/2022851751539645.jpg' 取xxx.jpg作为图片名称 img_name = str(img).split('/')[-1] # 拼接图片的保存路径 img_url = './saimenshibo/' + img_name # 第一部获取的页面上只是获取了所有图片的url,需要根据指定的URL去二进制下载对应图片数据 with open(img_url, 'wb') as fp: fp.write(img_data) print('下载成功') print('下载完成!')
补充关于python re模块中re.S, re.U, re.I, re.M, re.X
修饰符 | 描述 |
re.I | 忽略大小写 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 即为 . 并且包括换行符在内的任意字符(. 不包括换行符) |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B |
re.X | 为了增加可读性,忽略空格和 # 后面的注释 |