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 Django批量导入数据
Mar 25 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 Python
详解Python requests 超时和重试的方法
Dec 18 Python
python自动化之Ansible的安装教程
Jun 13 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
基于PyTorch中view的用法说明
Mar 03 Python
Python如何识别银行卡卡号?
Jun 10 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中的string类型使用说明
2010/07/27 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
javascript 自定义事件初探
2009/08/21 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python去掉行尾的换行符方法
2017/01/04 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python非递归全排列实现方法
2017/04/10 Python
django使用html模板减少代码代码解析
2017/12/12 Python
Python ini文件常用操作方法解析
2020/04/26 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
pip install命令安装扩展库整理
2021/03/02 Python
初中美术教学反思
2014/01/29 职场文书
信息管理专业自荐书
2014/06/05 职场文书
设计专业自荐信
2014/06/19 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
婚礼答谢词
2015/01/04 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript