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分割TXT文件成4K的TXT文件
May 23 Python
Python中的类学习笔记
Sep 23 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
Python存取XML的常见方法实例分析
Mar 21 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
详解用python写一个抽奖程序
May 10 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
python实现简易自习室座位预约系统
Jun 30 Python
使用pandas生成/读取csv文件的方法实例
Jul 09 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
vue实现弹幕功能
2019/10/25 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
python简单判断序列是否为空的方法
2015/06/30 Python
使用Python对SQLite数据库操作
2017/04/06 Python
python中的二维列表实例详解
2018/06/19 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
生物化学研究助理员求职信
2013/10/09 职场文书
手术室护士自我鉴定
2013/10/14 职场文书
国际会议邀请函范文
2014/01/16 职场文书
爱国电影观后感
2015/06/19 职场文书
员工聘用合同范本
2015/09/21 职场文书