python实现下载指定网址所有图片的方法
本文实例讲述了python实现下载指定网址所有图片的方法。分享给大家供大家参考。具体实现方法如下:
#coding=utf-8
#downloadpicturesoftheurl
#useage:pythondownpicture.pywww.baidu.com
importos
importsys
fromhtml.parserimportHTMLParser
fromurllib.requestimporturlopen
fromurllib.parseimporturlparse
defgetpicname(path):
'''retrivefilenameofurl'''
ifos.path.splitext(path)[1]=='':
returnNone
pr=urlparse(path)
path='http://'+pr[1]+pr[2]
returnos.path.split(path)[1]
defsaveimgto(path,urls):
'''
saveimgofurltolocalpath
'''
ifnotos.path.isdir(path):
print('pathisinvalid')
sys.exit()
else:
forurlinurls:
of=open(os.path.join(path,getpicname(url)),'w+b')
q=urlopen(url)
of.write(q.read())
q.close()
of.close()
classmyhtmlparser(HTMLParser):
'''putallsrcofimgintourls'''
def__init__(self):
HTMLParser.__init__(self)
self.urls=list()
self.num=0
defhandle_starttag(self,tag,attr):
iftag.lower()=='img':
srcs=[u[1]foruinattrifu[0].lower()=='src']
self.urls.extend(srcs)
self.num=self.num+1
if__name__=='__main__':
url=sys.argv[1]
ifnoturl.startswith('http://'):
url='http://'+sys.argv[1]
parseresult=urlparse(url)
domain='http://'+parseresult[1]
q=urlopen(url)
content=q.read().decode('utf-8','ignore')
q.close()
myparser=myhtmlparser()
myparser.feed(content)
foruinmyparser.urls:
if(u.startswith('//')):
myparser.urls[myparser.urls.index(u)]='http:'+u
elifu.startswith('/'):
myparser.urls[myparser.urls.index(u)]=domain+u
saveimgto(r'D:\python\song',myparser.urls)
print('numofdownloadpicturesis{}'.format(myparser.num))
运行结果如下:
numofdownloadpicturesis19
希望本文所述对大家的Python程序设计有所帮助。