Python实现从订阅源下载图片的方法
本文实例讲述了Python实现从订阅源下载图片的方法。分享给大家供大家参考。具体如下:
这段代码是基于python3.4实现的,和python2.X比起来有了好多差别啊。
这是一个练习,数据源来自网易订阅。代码如下:
__author__='Saint' importos importurllib.request importjson fromhtml.parserimportHTMLParser #从获取的网页内容筛选图片的内容 classMyHtmlParser(HTMLParser): links=[] defhandle_starttag(self,tag,attrs): iftag=="img": iflen(attrs)==0: pass else: forname,valueinattrs: ifname=="src": self.links.append(value) classDown(object): #总的目录 img_path="E:/saint" #下载目录 dir='' #采集源地址 collect_links=["http://dy.163.com/v2/media/articlelist/T1374483113516-1","http://dy.163.com/v2/media/articlelist/T1420776257254-1","http://dy.163.com/v2/media/articlelist/T1376641060407-1"] img_links="http://dy.163.com/v2/article" defhandleCollect(self): forcollect_linkinself.collect_links: notice="开始从["+collect_link+"]采集图片" print(notice) #建立下载的目录 dir_name=collect_link.split("/")[-1] self.isDirExists(dir_name) dict=self.getListFromSubscribe(collect_link) ifdict==False: print("数据采集失败,是否继续(y/n)") op=input(); ifop=="y": os.system("cls") pass elifop=="n": print("停止采集") break else: os.system("cls") print("非法输入") break else: forpageindict: page_uri=self.img_links+"/"+page["tid"]+"/"+page["docid"] self.getImgFromUri(page_uri) print("是否继续(y/n)") new_op=input(); ifnew_op=="n": os.system("cls") print("采集完毕") break print("OK") #从订阅源获取目录 defgetListFromSubscribe(self,uri): res=urllib.request.urlopen(uri) ifres.code<200orres.code>300: os.system("clear") returnFalse else: result=res.read().decode("gbk")#3.4版本的read()返回的是byte类型,需要decode()处理,选项是网页编码 dict=json.loads(result) ifdict['code']!=1: print(dict['msg']) returnFalse else: returndict['data'] #获取本期订阅的网页,并从网页中提取出来需要的图片 defgetImgFromUri(self,uri): html_code=urllib.request.urlopen(uri).read().decode("gbk") hp=MyHtmlParser() hp.feed(html_code) hp.close() forlinkinhp.links:#hp.links是图片的下载地址的列表 self.writeToDisk(link) #检查文件目录是否存在,如果不存在,则创建目录 defisDirExists(self,dir_name): self.dir=self.img_path+dir_name isExists=os.path.exists(self.dir) ifnotisExists: os.makedirs(self.dir) returnTrue else: returnTrue #下载文件,并且写入磁盘 defwriteToDisk(self,url): os.chdir(self.dir) file=urllib.request.urlopen(url).read() file_name=url.split("/")[-1] open(file_name,"wb").write(file) returnTrue if__name__=="__main__": down=Down() down.handleCollect()
希望本文所述对大家的Python程序设计有所帮助。