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中的字典遍历备忘
Jan 17 Python
python基础教程之分支、循环简单用法
Jun 16 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
Django实现学员管理系统
Feb 26 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
Python编程中类与类的关系详解
Aug 08 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
python 项目目录结构设置
Feb 14 Python
jupyter修改文件名方式(TensorFlow)
Apr 21 Python
Python多线程正确用法实例解析
May 30 Python
解决python 输出到csv 出现多空行的情况
Mar 24 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP入门学习笔记之一
2010/10/12 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
如何编写jquery插件
2017/03/29 jQuery
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
React Router v4 入坑指南(小结)
2018/04/08 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
js尾调用优化的实现
2019/05/23 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
Python ini文件常用操作方法解析
2020/04/26 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
甜品店创业计划书
2014/09/21 职场文书
志愿者工作心得体会
2016/01/15 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL