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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
Python3实现从文件中读取指定行的方法
May 22 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
在Python 的线程中运行协程的方法
Feb 24 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
django有哪些好处和优点
Sep 01 Python
python中操作文件的模块的方法总结
Feb 04 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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
PHP中的替代语法介绍
2015/01/09 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
老生常谈js数据类型
2017/08/03 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
Python决策树分类算法学习
2017/12/22 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
临床医学生职业规划书范文
2014/10/25 职场文书
助学感谢信范文
2015/01/21 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
《比的意义》教学反思
2016/02/18 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python