ホームページ バックエンド開発 Python チュートリアル Python实现从订阅源下载图片的方法

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

Jun 06, 2016 am 11:22 AM
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 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程序设计有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

携帯電話の文字サイズの設定方法(携帯電話の文字サイズを簡単に調整できます) 携帯電話の文字サイズの設定方法(携帯電話の文字サイズを簡単に調整できます) May 07, 2024 pm 03:34 PM

携帯電話の文字サイズの設定方法(携帯電話の文字サイズを簡単に調整できます)

Deepseek Xiaomiをダウンロードする方法 Deepseek Xiaomiをダウンロードする方法 Feb 19, 2025 pm 05:27 PM

Deepseek Xiaomiをダウンロードする方法

テンプレートのメリットとデメリットは何ですか? テンプレートのメリットとデメリットは何ですか? May 08, 2024 pm 03:51 PM

テンプレートのメリットとデメリットは何ですか?

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Jul 01, 2024 am 07:22 AM

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表

携帯電話の画面を保護する携帯電話のスクリーンプロテクターの選び方 (携帯電話のスクリーンプロテクターを購入する際のいくつかの重要なポイントとヒント) 携帯電話の画面を保護する携帯電話のスクリーンプロテクターの選び方 (携帯電話のスクリーンプロテクターを購入する際のいくつかの重要なポイントとヒント) May 07, 2024 pm 05:55 PM

携帯電話の画面を保護する携帯電話のスクリーンプロテクターの選び方 (携帯電話のスクリーンプロテクターを購入する際のいくつかの重要なポイントとヒント)

どうやって彼にdeepseekに尋ねますか どうやって彼にdeepseekに尋ねますか Feb 19, 2025 pm 04:42 PM

どうやって彼にdeepseekに尋ねますか

評価関数の保存方法 評価関数の保存方法 May 07, 2024 am 01:09 AM

評価関数の保存方法

NET40とはどのようなソフトウェアですか? NET40とはどのようなソフトウェアですか? May 10, 2024 am 01:12 AM

NET40とはどのようなソフトウェアですか?

See all articles