Python实现从订阅源下载图片的方法


Posted in Python onMarch 11, 2015

本文实例讲述了Python实现从订阅源下载图片的方法。分享给大家供大家参考。具体如下:

这段代码是基于python 3.4实现的,和python2.X 比起来有了好多差别啊。
这是一个练习,数据源来自网易订阅。代码如下:

__author__ = 'Saint'

import os

import urllib.request

import json

from html.parser import HTMLParser

# 从获取的网页内容筛选图片的内容

class MyHtmlParser(HTMLParser):

    links = []

    def handle_starttag(self, tag, attrs):

        if tag == "img":

            if len(attrs) == 0:

                pass

            else:

                for name, value in attrs:

                    if name == "src":

                        self.links.append(value)

class Down(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"

    def handleCollect(self):

        for collect_link in self.collect_links:

            notice = "开始从[" + collect_link + "]采集图片"

            print(notice)

            # 建立下载的目录

            dir_name = collect_link.split("/")[-1]

            self.isDirExists(dir_name)

            dict = self.getListFromSubscribe(collect_link)

            if dict == False:

                print("数据采集失败,是否继续(y/n)")

                op = input();

                if op == "y":

                    os.system("cls")

                    pass

                elif op == "n":

                    print("停止采集")

                    break

                else:

                    os.system("cls")

                    print("非法输入")

                    break

            else:

                for page in dict:

                    page_uri = self.img_links + "/" + page["tid"] + "/" + page["docid"]

                    self.getImgFromUri(page_uri)

                    print("是否继续(y/n)")

                    new_op = input();

                    if new_op == "n":

                        os.system("cls")

                        print("采集完毕")

                        break

        print("OK")

    # 从订阅源获取目录

    def getListFromSubscribe(self, uri):

        res = urllib.request.urlopen(uri)

        if res.code < 200 or res.code > 300:

            os.system("clear")

            return False

        else:

            result = res.read().decode("gbk") # 3.4版本的read()返回的是byte类型,需要decode()处理,选项是网页编码

            dict = json.loads(result)

            if dict['code'] != 1:

                print(dict['msg'])

                return False

            else:

                return dict['data']

    # 获取本期订阅的网页,并从网页中提取出来需要的图片

    def getImgFromUri(self, uri):

        html_code = urllib.request.urlopen(uri).read().decode("gbk")

        hp = MyHtmlParser()

        hp.feed(html_code)

        hp.close()

 

        for link in hp.links: # hp.links 是图片的下载地址的列表

            self.writeToDisk(link)

    # 检查文件目录是否存在,如果不存在,则创建目录

    def isDirExists(self, dir_name):

        self.dir = self.img_path + dir_name

        isExists = os.path.exists(self.dir)

        if not isExists:

            os.makedirs(self.dir)

            return True

        else:

            return True

    # 下载文件,并且写入磁盘

    def writeToDisk(self, url):

        os.chdir(self.dir)

        file = urllib.request.urlopen(url).read()

        file_name = url.split("/")[-1]

        open(file_name, "wb").write(file)

        return True

if __name__ == "__main__":

    down = Down()

    down.handleCollect()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python 中文字符串的处理实现代码
Oct 25 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
详解python进行mp3格式判断
Dec 23 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
python实现k-means聚类算法
Feb 23 Python
python异步存储数据详解
Mar 19 Python
Python pandas用法最全整理
Aug 04 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
Django视图、传参和forms验证操作
Jul 15 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 Python
Python获取网页上图片下载地址的方法
Mar 11 #Python
Python实现从百度API获取天气的方法
Mar 11 #Python
Python计算回文数的方法
Mar 11 #Python
Python用GET方法上传文件
Mar 10 #Python
Python爬取读者并制作成PDF
Mar 10 #Python
Python生成随机MAC地址
Mar 10 #Python
Python中实现结构相似的函数调用方法
Mar 10 #Python
You might like
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
Javascript之文件操作
2007/03/07 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
python实现划词翻译
2020/04/23 Python
Python创建文件和追加文件内容实例
2014/10/21 Python
详解Django中的过滤器
2015/07/16 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python文件和流(实例讲解)
2017/09/12 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
会计自我鉴定
2013/11/02 职场文书
应聘会计求职信
2014/06/11 职场文书
预防传染病方案
2014/06/14 职场文书
中学清明节活动总结
2014/07/04 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
总经理检讨书范文
2015/02/16 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android