文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python下载图片

2023-01-31 02:03

关注

在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 SGMLParserclass 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的一个分析html页面的类
p_w_picpathpath=[]

#cd 函数用于判断路径是否正确,如正确则改变当前工作路径
def cd(ss):
    try:
        os.chdir(ss)
        print '改变工作目录为'+ss
        return 0
    except:
        print '输入图片保存路径有误,请重新输入'
        return 1
#addp_w_picpathpath,该函数将图片路径添加到p_w_picpathpath这个list中
def addp_w_picpathpath(surl):
    if 'http://' in surl
        p_w_picpathpath.append(surl)
        print '找到图片:'+surl.split('/')[-1]+'图片地址为:'+surl
    else:
         surl=str_url+surl
        p_w_picpathpath.append(surl)
        print '找到图片:'+surl.split('/')[-1]+'图片地址为:'+surl

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

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:
    addp_w_picpathpath(url)
#调用图片下载函数
p_w_picpath_down(p_w_picpathpath)

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

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯