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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
分析在Python中何种情况下需要使用断言
Apr 01 Python
初步剖析C语言编程中的结构体
Jan 16 Python
Python脚本实现自动发带图的微博
Apr 27 Python
详解python中requirements.txt的一切
Mar 03 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
ipad上运行python的方法步骤
Oct 12 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Python中os模块功能与用法详解
Feb 26 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
总结js函数相关知识点
2018/02/27 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
用js编写留言板
2020/03/17 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
文科生自我鉴定
2014/02/15 职场文书
决心书标准格式
2014/03/11 职场文书
廉洁校园实施方案
2014/05/25 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
行为习惯主题班会
2015/08/14 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android