Python实现从订阅源下载图片的方法

 更新时间:2015年03月11日 09:38:54   作者:saintatgod   我要评论
这篇文章主要介绍了Python实现从订阅源下载图片的方法,涉及Python采集的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • 在django view中给form传入参数的例子

    在django view中给form传入参数的例子

    今天小编就为大家分享一篇在django view中给form传入参数的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python安装图文教程 Pycharm安装教程

    Python安装图文教程 Pycharm安装教程

    这篇文章主要为大家详细介绍了Pycharm及Python安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python实现n个数中选出m个数的方法

    python实现n个数中选出m个数的方法

    今天小编就为大家分享一篇python实现n个数中选出m个数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python pandas获取csv指定行 列的操作方法

    python pandas获取csv指定行 列的操作方法

    这篇文章主要介绍了pandas获取csv指定行,列的操作方法,本文简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • matplotlib在python上绘制3D散点图实例详解

    matplotlib在python上绘制3D散点图实例详解

    这篇文章主要介绍了matplotlib在python上绘制3D散点图实例详解,首先介绍了官网的实例,然后分享了本文简单代码示例,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12
  • Python3使用requests发闪存的方法

    Python3使用requests发闪存的方法

    requests是一个python 轻量的http客户端库,相比python的标准库要优雅很多。接下来通过本文给大家介绍Python3使用requests发闪存的方法,感兴趣的朋友一起学习吧
    2016-05-05
  • python 随机数生成的代码的详细分析

    python 随机数生成的代码的详细分析

    如果你对python随机数生成的实际应用有不解之处,你就可以通过以下的内容对其进行了解,以下十九相关内容的介绍
    2011-05-05
  • python开发中range()函数用法实例分析

    python开发中range()函数用法实例分析

    这篇文章主要介绍了python开发中range()函数用法,以实例形式较为详细的分析了Python中range()函数遍历列表的相关技巧,需要的朋友可以参考下
    2015-11-11
  • Python基于mysql实现学生管理系统

    Python基于mysql实现学生管理系统

    这篇文章主要为大家详细介绍了Python基于mysql实现学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • python中解析json格式文件的方法示例

    python中解析json格式文件的方法示例

    这篇文章主要给大家介绍了python中解析json格式文件的相关资料,解析json文件就是编码和解码,本文还介绍了在解析中可能遇到的问题与解决方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05

最新评论