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 MD5文件生成码
Jan 12 Python
Python中input和raw_input的一点区别
Oct 21 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
Python中模块(Module)和包(Package)的区别详解
Aug 07 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
tensorflow 查看梯度方式
Feb 04 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
Nov 17 Python
Python编写nmap扫描工具
Jul 21 Python
Python集合的基础操作
Nov 01 Python
python标准库ElementTree处理xml
May 20 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 Cookie的使用教程详解
2013/06/03 PHP
php删除指定目录的方法
2015/04/03 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
Python入门篇之文件
2014/10/20 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
村优秀党员事迹材料
2014/01/15 职场文书
设计顾问服务计划书
2014/05/04 职场文书
心得体会的写法
2014/09/05 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
大学学生个人总结
2015/02/15 职场文书
公路施工安全责任书
2015/05/08 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
python基于tkinter制作下班倒计时工具
2021/04/28 Python
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS