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求素数示例分享
Feb 16 Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
python 同时运行多个程序的实例
Jan 07 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python hough变换检测直线的实现方法
Jul 12 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
在Python中字典按值排序的实现方法
Nov 12 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
Zerg兵种介绍
2020/03/14 星际争霸
深入PHP内存相关的功能特性详解
2013/06/08 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
优化javascript的执行速度
2010/01/23 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
javaScript语法总结
2016/11/25 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
Python实现线程池代码分享
2015/06/21 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Puppeteer使用示例详解
2019/06/20 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python实现交并比IOU教程
2020/04/16 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
android面试问题与答案
2016/12/27 面试题
资产评估专业学生的自我鉴定
2013/11/14 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
法制宣传标语集锦
2014/06/25 职场文书
销售顾问工作计划书
2014/09/15 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
拾金不昧表扬信
2015/01/16 职场文书
开票员岗位职责
2015/02/12 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis