随便写的一个python小程序,从网页中下载图片

原创 2004年09月30日 21:27:00

在diveintopython网站上,http://diveintopython.org/html_processing/extracting_data.html可以找到一些html处理的例子,比如这个类可以用来获取html页面中的href标签内容。

from sgmllib import SGMLParser

class URLLister(SGMLParser):
    def reset(self):                              
        SGMLParser.reset(self)
        self.urls = []

    def start_a(self, attrs):                     
        href = [v for k, v in attrs if k=='href']  
        if href:
            self.urls.extend(href)



将这个文件href的地方都改成src,start_a改成start_img
即:
from sgmllib import SGMLParser
class URLLister(SGMLParser):
    def reset(self):                             
        SGMLParser.reset(self)
        self.urls = []
    def start_img(self, attrs):                     
        src = [v for k, v in attrs if k=='src']
        if src:
            self.urls.extend(src)
保存代码内容为urllister.py文件,放在python安装目录即可,这样就可以用来分析网页的图片地址了。








下面为图片下载的程序内容

import urllib2
import urllib
import os
import urllister

# 这是来自http://diveintopython.org/html_processing/extracting_data.html#dialect.extract.urllib的一个分析html页面的类


imagepath=[]

#cd 函数用于判断路径是否正确,如正确则改变当前工作路径
def cd(ss):
    try:
        os.chdir(ss)
        print '改变工作目录为'+ss
        return 0
    except:
        print '输入图片保存路径有误,请重新输入'
        return 1

#addimagepath,该函数将图片路径添加到imagepath这个list中
def addimagepath(surl):
    if 'http://' in surl 
        imagepath.append(surl)
        print '找到图片:'+surl.split('/')[-1]+'图片地址为:'+surl
    else:
        surl=str_url+surl
        imagepath.append(surl)
        print '找到图片:'+surl.split('/')[-1]+'图片地址为:'+surl

#download images
def image_down(list_image):
    if not list_image:
        print "该页面没有任何图片"
    else:
        for image in list_image:
            try:
                urllib.urlretrieve(image,image.split('/')[-1])
#利用image.split('/')[-1]获得文件名
                print "来自"+image+"的图片保存成功!"
            except:
                print "来自"+image+"图片没有保存成功,继续保存下一张图片...."

print "请输入网页的url地址:"
str_url=raw_input()

print "请输入图片保存地址,如果直接回车将默认保存到我的文档"

temp=1
while temp:
    str_save=raw_input()
    if not str_save:
        str_save='E:/Fei_Doc'
    temp=cd(str_save)
   


try:
    sock=urllib2.urlopen(str_url)
    print "页面连接成功!开始获取图片地址……"
except:
    print "sorry,输入的地址有误或页面无法连接,程序将自动退出"

parser=urllister.URLLister()
parser.feed(sock.read())
sock.close()
parser.close()
for url in parser.urls:
    addimagepath(url)


#调用图片下载函数
image_down(imagepath)

#程序结束


尽管这个程序能基本上解决问题,不过我发现有一些不足:
1、如果页面的img标签后面没有直接跟src属性,比如复杂一点的img代码:
 <img border="0" onload=
"
function onload(event) {
javascript:
    if (this.width > screen.width - 333) {
        this.width = screen.width - 333;
    }
}
"
src="http://bbs.263.net/forumData/119/2860134_1.jpg" alt="按此在新窗口浏览图片" />

那么urllister便无法识别了。不过这个问题解决起来比较容易,直接对html代码每行代码进行分析,利用split('src'),可以得到所有src标签的内容,然后根据后缀是否为jpg,gif等得到图片文件地址。
       

2、上面的程序只是对地址为http开始的图片以及当前url下面目录的图片进行处理,如果src里面的内容以“../images“ 或者 “/“开头,则需另外处理。
 

小程序打开网页,微信小程序web-view打开html网页

经常有学员向子恒老师咨询: 我们有自己的web网站, 已经上传了很多网页信息, 微信小程序中能不能打开网页, 让客户看到内容。 以前小程序里是不支持的, 但是在昨天...
  • towtotow
  • towtotow
  • 2017年11月03日 10:27
  • 11702

微信小程序页面跳转三种方式

为了不让用户在使用小程序时造成困扰,微信小程序规定页面路径只能是五层,请尽量避免多层级的交互方式。 页面跳转的话就涉及到了多个页面层级第一种:wx.navigateTo(OBJECT) 保留当前页...
  • Angelaaa_
  • Angelaaa_
  • 2016年11月18日 15:25
  • 41138

提取网页中的图片路径的小程序

  • 2009年11月05日 14:27
  • 360KB
  • 下载

浅谈小程序内嵌网页及内嵌网页跳转分享实现

上个月,小程序开发内嵌web页面的功能,这个对于很多微信开发者都是个重大消息。最近两天,笔者项目中有这样一个需求,支持小程序内嵌网页,并且在内嵌网页中多次跳转,分享后,点开还是在跳转之后的网页。对于这...
  • rolan1993
  • rolan1993
  • 2017年12月05日 15:41
  • 2073

网页图片下载小程序(C#编写)

  • 2010年08月12日 08:55
  • 38KB
  • 下载

C# 网络编程之webBrowser获取网页url和下载网页中图片

该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识、正则表达式实现浏览、获取url、下...
  • Eastmount
  • Eastmount
  • 2013年10月05日 02:04
  • 15843

python 爬虫批量下载图片

今天加班啊,苦啊!! 无聊,用python写了一个抓图片的图虫,感觉很不错啊,哈哈 先贴上代码:(python 版本:2.7.9) __author__ = 'bloodchilde' impor...
  • dai_jing
  • dai_jing
  • 2015年06月27日 16:12
  • 4696

Python3下载网页中的图片

import urllib.request import re req = urllib.request.urlopen('http://www.imooc.com/') buf = req.read...
  • liuweiyuxiang
  • liuweiyuxiang
  • 2016年10月07日 17:04
  • 3359

随便写的一个python小程序,从网页中下载图片

在diveintopython网站上,http://diveintopython.org/html_processing/extracting_data.html可以找到一些html处理的例子,比如这...
  • lgfei
  • lgfei
  • 2004年09月30日 21:27
  • 19046

通过asp.net批量下载图片的方法

有时,我们看到比较好的漂亮图片壁纸,风景图画等,可能需要从固定的网址下载图片。如果一个网页一个网页地打开然后另存为我们的文件名,很费时。有没有批量下载的办法呢?有的!但前提是:图片的路径及文件名有规律...
  • johnsuna
  • johnsuna
  • 2008年04月30日 21:58
  • 9326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:随便写的一个python小程序,从网页中下载图片
举报原因:
原因补充:

(最多只允许输入30个字)