Python实现从订阅源下载图片的方法
admin
2023-07-31 02:17:12
0

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

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...