赞
踩
使用Python
保存网站上的图片。
测试网站是豆瓣电影上的海报网址
使用以下code成功的建立了一个文件夹,并且在其中
保存该页面上的17张海报图片(仅保存海报图片,其他图片不保存)。
使用`Python`保存网站上的图片。
测试网站是豆瓣电影上的海报网址
使用以下code成功的建立了一个文件夹,并且在其中
保存该页面上的17张海报图片(仅保存海报图片,其他图片不保存)。
from urllib import request
import os
def url_open(url):
req = request.Request(url)
response = request.urlopen(url)
html = response.read()
return html
def find_imgs(url): #构造一个函数,返回一个存储了若干图片地址的列表
html = url_open(url).decode('utf-8') #使用decode('utf-8') 建立一个str对象
img_addrs = [] #img_addrs是一个储存图片地址的列表
a = html.find('img src=') #寻找图片地址的起始位置,如果没有找到find()会返回-1
while a != -1: #将页面上所有海报图片全部提取
b = html.find('.jpg',a, a+100) #从a-a+100区间,寻找图片地址的末尾位置,
if b != -1:
c = html[a+9:b+4] #c就是在html中截取到的图片地址
if 'view' in c: #进行一步筛选,只想保留海报图片,不需要其他图片
print(c) #打印出图片地址
img_addrs.append(c) #将图片地址添加到列表中
else: #没有找到合适的图片地址怎么办?
b = a + 100 #接着找
a = html.find('img src=',b)
return img_addrs
def save_imgs(folder,img_addrs): #构造一个函数能够保存图片
os.mkdir(folder) #建立文件夹
os.chdir(folder) #跳转到该文件夹 进行之后文件的写入
for each in img_addrs: #依次写入图片。并采用图片地址最后一个小节 作为文件名
filename = each.split("/")[-1]
with open(filename,'wb')as f:
img = url_open(each)
f.write(img)
def download_jpg():
folder = 'D:/eclmn/tobeD' #设定的保存位置,以及目标网址
url = "https://movie.douban.com/subject/6390825/photos?type=R&start=0&sortby=like&size=a&subtype=o"
img_addrs = find_imgs(url) #调用find_imgs()函数
print("共保存 %d 张图片"% len(img_addrs)) #打印图片数量
save_imgs(folder,img_addrs) #调用save_imgs() 函数
if __name__ == '__main__':
download_jpg()
显示的结果:
https://img3.doubanio.com/view/photo/m/public/p2512123434.jpg
https://img1.doubanio.com/view/photo/m/public/p2502233869.jpg
https://img3.doubanio.com/view/photo/m/public/p2462191333.jpg
https://img3.doubanio.com/view/photo/m/public/p2512869662.jpg
https://img3.doubanio.com/view/photo/m/public/p2511515914.jpg
https://img3.doubanio.com/view/photo/m/public/p2506117181.jpg
https://img3.doubanio.com/view/photo/m/public/p2511801982.jpg
https://img3.doubanio.com/view/photo/m/public/p2511586591.jpg
https://img3.doubanio.com/view/photo/m/public/p2506401176.jpg
https://img3.doubanio.com/view/photo/m/public/p2512208685.jpg
https://img3.doubanio.com/view/photo/m/public/p2512202212.jpg
https://img3.doubanio.com/view/photo/m/public/p2511585613.jpg
https://img3.doubanio.com/view/photo/m/public/p2508851750.jpg
https://img3.doubanio.com/view/photo/m/public/p2507079945.jpg
https://img3.doubanio.com/view/photo/m/public/p2502610863.jpg
https://img3.doubanio.com/view/photo/m/public/p2502225690.jpg
https://img1.doubanio.com/view/photo/m/public/p2493795748.jpg
共保存 17 张图片
可以使用正则表达式进行匹配。在import re
之后 输入下面两句就会在html中查找符合条件的字符串,并以列表的形式存储。
p=r'<img src="([^"]+/.jpg)"
img_list=re.findall(p,html)
from urllib import request
import os
def url_open(url):
req=request.Request(url)
req.add_header('***')
response = request.urlopen(url)
html = response.read()
return html
def get_page(url):
html= url_open(url).decode('utf-8)
a = html.find('current-comment-page') +23
b = html.find(']',a)
return html[a:b]
def find_imgs(url):
html = url_open(url).decode('utf-8')
img_addrs = []
a = html.find('img src=')
while a != -1:
b = html.find('.jpg',a,a+100)
if b != -1:
img_addrs.append(html[a+9:b+4])
else:
b = a + 9
a = html.find('img src=',b)
return img_addrs
def save_imgs(folder, img_addrs):
for each in img_addrs:
filename = each.split('/')[-1]
with open(filename, 'wb') as f:
img = url_open(each)
f.write(img)
def download_jpg(folder='D:/eclmn/tobeD', pages=10):
os.chdir(folder)
url = 'http://jandan.net/ooxx'
page_num = int(get_page(url))
for i in range(pages):
page_num -= 1
page_url = url + 'page-' + str(page_num) +'#comments'
img_addrs = find_imgs(page_url)
save_imgs(folder,img_addrs)
if __name__ = '__main__':
download_jpg()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。