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中删除文件的程序代码
Mar 13 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
python抓取网页中图片并保存到本地
Dec 01 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
python线程中的同步问题及解决方法
Aug 29 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
Spy++的使用方法及下载教程
Jan 29 Python
python 递归相关知识总结
Mar 03 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
摩卡咖啡
2021/03/03 咖啡文化
php5.2时间相差8小时
2007/01/15 PHP
php db类库进行数据库操作
2009/03/19 PHP
PHP学习笔记之一
2011/01/17 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
node.js中cluster的使用教程
2017/06/09 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
详解Python3 pickle模块用法
2019/09/16 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
生产内勤岗位职责
2013/12/07 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
导游词之江南周庄
2019/12/06 职场文书
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS