当前位置:   article > 正文

Python 保存 网页上的图片_python保存网页图片

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

显示的结果:

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 张图片
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

可以使用正则表达式进行匹配。在import re之后 输入下面两句就会在html中查找符合条件的字符串,并以列表的形式存储。

p=r'<img src="([^"]+/.jpg)"
img_list=re.findall(p,html)
  • 1
  • 2
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/759167
推荐阅读
相关标签
  

闽ICP备14008679号