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处理python编码问题
Mar 13 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
详解python中docx库的安装过程
Nov 08 Python
Python的几种主动结束程序方式
Nov 22 Python
django迁移文件migrations的实现
Mar 31 Python
Django分组聚合查询实例分享
Apr 29 Python
如何理解Python中包的引入
May 29 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
深入分析php之面向对象
2013/05/15 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
javascript新手语法小结
2008/06/15 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
Node.js学习入门
2017/01/03 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python实现堆栈与队列的方法
2015/01/15 Python
Python实现字典依据value排序
2016/02/24 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python如何生成各种随机分布图
2018/08/27 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
给老婆的搞笑检讨书
2014/01/12 职场文书
合伙协议书
2014/04/23 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
用JS实现飞机大战小游戏
2021/06/09 Javascript
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android