逛今日头条,发现有些好的图片想搜藏,作为刚学python的小白,立即实践,用正则写了个简单的脚本,自动在桌面创建文件夹,下载头条文章里面的图片。
使用方法:1、只用填写网址url。2、填写下载文件夹路径及名称path。3、运行
头条图片存在两种形式,一种是单网页帖子里的图片,另外一种是幻灯片形式的图片集,分别对应两份代码。
------------------------------------------分隔符----------------------------------------
下载实例
------------------------------------------分隔符----------------------------------------
单网页帖子里的图片下载
[Asm] 纯文本查看 复制代码 import urllib.request
import re
import urllib.error
#添加安装opener()为全局,伪装浏览器报头
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36") #根据浏览器填写
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
#填写参数
url = "https://www.toutiao.com/i6489288219677442574/" #网页爬取地址
pat = 'http://(.*?)"' # 图片地址正则表达式
path = "E:/桌面/情侣头像/" #存储目录,注意需要先创建好文件夹
hp = 'http://' #图片地址构造部分,若无则填写''
#创建下载文件夹
def mkdir(path):
import os
folder = os.path.exists(path)
if not folder: #判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径
print ("--- 文件夹创建成功 ---\n")
else:
print ("--- 文件夹已存在! ---\n")
mkdir(path) #调用函数
#获取网页中图片地址数据
def get_data(url,pat):
html = urllib.request.urlopen(url) #打开网页
data = html.read().decode("utf-8","ignore") #获取网页数据
# print(len(data)) #测试用
html.close() #网页关闭,否则会出现意想不到的问题
imglist = re.compile(pat).findall(data) #搜索图片地址,存在列表imglist中
# print(len(imglist)) #测试用
# print(imglist) #测试用
return imglist
#获取图片(存储路径,图片地址构造)
def get_img(path,hp):
imglist = get_data(url,pat) #调用上方数据函数,注意这里需要使用imglist=调用函数,否则显示for----中 的imglist未定义
# imglist = re.compile(pat).findall(data) #搜索图片地址,存在列表imglist中
for i in range(0,len(imglist)): #爬取每一个图片
try:
imgurl = hp + imglist[i]
# print(imgurl) #测试用
file = path + str(i) + ".jpg" #创建本地目录
urllib.request.urlretrieve(imgurl,filename = file) #下载到本都,文件名为file
print("第" + str(i) + "个爬取---成功")
except urllib.error.URLError as er:
if hasattr(er,"code"):
print(er.code)
if hasattr(er,"reason"):
print(er.reason)
except Exception as e:
print(e)
get_img(path,hp) #调用函数
print("\n--- 结束 ---")
------------------------------------------分隔符----------------------------------------
幻灯片形式的图片集
[Asm] 纯文本查看 复制代码 import urllib.request
import re
import urllib.error
#添加安装opener()为全局,伪装浏览器报头
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36") #根据浏览器填写
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
#填写参数
url = "https://www.toutiao.com/i6460804345263817230/" #网页爬取地址
pat = r'uri\\":\\"origin\\\\/(.*?)\\",\\"height' # 图片地址正则表达式 原表达式为,uri\":\"origin\\/(.*?)\",\"height,李荣r''进行其中\需要转义,即\\代表\,r为转义方法
path = "E:/桌面/人民币景点/" #存储目录,注意需要先创建好文件夹
hp = 'http://p99.pstatp.com/origin/' #图片地址构造部分,若无则填写''
#创建下载文件夹
def mkdir(path):
import os
folder = os.path.exists(path)
if not folder: #判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径
print ("--- 文件夹创建成功 ---\n")
else:
print ("--- 文件夹已存在! ---\n")
mkdir(path) #调用函数
#获取网页中图片地址数据
def get_data(url,pat):
html = urllib.request.urlopen(url) #打开网页
data = html.read().decode("utf-8","ignore") #获取网页数据
# print(len(data)) #测试用
# print(data)
imglist = re.compile(pat).findall(data) #搜索图片地址,存在列表imglist中
# print(len(imglist)) #测试用
# print(imglist) #测试用
html.close() #网页关闭,否则会出现意想不到的问题
return imglist
#获取图片(存储路径,图片地址构造)
def get_img(path,hp):
imglist = get_data(url,pat) #调用上方数据函数,注意这里需要使用imglist=调用函数,否则显示for----中 的imglist未定义
# imglist = re.compile(pat).findall(data) #搜索图片地址,存在列表imglist中
for i in range(0,len(imglist)): #爬取每一个图片
try:
imgurl = hp + imglist[i]
# print(imgurl) #测试用
file = path + str(i) + ".jpg" #创建本地目录
urllib.request.urlretrieve(imgurl,filename = file) #下载到本都,文件名为file
print("第" + str(i) + "个爬取---成功")
except urllib.error.URLError as er:
if hasattr(er,"code"):
print(er.code)
if hasattr(er,"reason"):
print(er.reason)
except Exception as e:
print(e)
get_img(path,hp) #调用函数
print("\n--- 结束 ---")
|