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爬虫框架Scrapy安装使用步骤
Apr 01 Python
编写Python CGI脚本的教程
Jun 29 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
python实现电子产品商店
Feb 26 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
python全栈知识点总结
Jul 01 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
Tensorflow中的dropout的使用方法
Mar 13 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中显示格式化的用户输入
2006/10/09 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
简单的js分页脚本
2009/05/21 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
javascript实现网站加入收藏功能
2015/12/16 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python实现微信小程序自动回复
2018/09/10 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
金鑫耀Java笔试题
2014/09/06 面试题
网络编辑岗位职责范本
2014/02/10 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
好员工观后感
2015/06/17 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书