Python 保存 网页上的图片

使用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()
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值