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决策树之C4.5算法详解
Dec 20 Python
python 实现登录网页的操作方法
May 11 Python
详解django自定义中间件处理
Nov 21 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
Python登录系统界面实现详解
Jun 25 Python
Python缓存技术实现过程详解
Sep 25 Python
python将字符串转变成dict格式的实现
Nov 18 Python
python实现滑雪者小游戏
Feb 22 Python
django中的数据库迁移的实现
Mar 16 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
Python pickle模块常用方法代码实例
Oct 10 Python
利用Python+OpenCV三步去除水印
May 28 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中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
两款万能的php分页类
2015/11/12 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
python thread 并发且顺序运行示例
2009/04/09 Python
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
人力资源管理专业学生自我评价
2013/11/20 职场文书
爱国主义演讲稿
2014/05/07 职场文书
个人安全生产责任书
2014/07/28 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
优秀团员自我评价
2015/03/10 职场文书
教师理论学习心得体会
2016/01/21 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL