可对一些常见的图片网站进行爬取,对于不同的网站,只需要稍修改parse_html函数中的patern的正则表达式即可。
(该代码参考了网上一些大佬的代码,在此表示感谢,非商用,仅供学习使用!)
import requests
from hashlib import md5
import re
import os
global dir
dir = './yazi' #图片的保存地址
def get_text(url):
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
def parse_html(url, list):
demo = get_text(url)
# 将正则表达式编译成正则表达式对象,方便复用该正则表达式
# ".*?" :匹配任意字符串
# 如果是不同的网站,需要修改下行的正则表达式
patern = re.compile('\<img src2="(.*?\.jpg)" alt=', re.S)
results = re.findall(patern, demo)
for result in results:
#result = "https:"+result
list.append(result)
return list
def download_image(url):#保存图片链接
r = requests.get(url)
r.raise_for_status()
save_image(r.content)
def save_image(content):#下载图片
file_path = '{0}/{1}.{2}'.format(dir, md5(content).hexdigest(), 'jpg')#注意斜杠是/
#format('文件储存地址',哈希算法随机生成子文件名称,'文件格式')
if not os.path.exists(file_path):#os.path.exists(file_path)判断文件是否存在,存在返回1,不存在返回0
with open(file_path, 'wb') as f:
f.write(content)
f.close()
# 如果文件夹目录不存在,则创建
if not os.path.exists(dir):
os.mkdir(dir)
list = []
for i in range(2,8):
# 爬取的图片网站的网址
url = "http://sc.chinaz.com/tag_tupian/YaZi_%d.html"%(i+1)
list = parse_html(url, list)
count = 0
for i in list:
count = count + 1
print(i) #输出图片链接
print("一共有"+str(count)+"条数据!")
for i in list:
download_image(i)
print("下载成功")
运行结果:
此时在./yazi文件夹下面已经有保存的120张图片了。