python实现爬虫下载漫画示例

Jun 06, 2016 am 11:29 AM
漫画 爬虫類

代码如下:


#!/usr/bin/python3.2
import os,socket
import urllib
import urllib.request,threading,time
import re,sys
global manhuaweb,weburl,floder,chapterbegin,currentthreadnum,threadcount,mutex,mutex2

weburl=''
floder=''
chapterbegin=0
currentthreadnum=0
threadcount=6


if len(sys.argv)>=3:
  weburl=sys.argv[1]
  floder=sys.argv[2]
else:
    print("usag: downloadmanhua weburl floder chapterbegin=0 threadnnum=6")
    sys.exit(0)
if len(sys.argv)>=4:
  chapterbegin=int(sys.argv[3])
if len(sys.argv)>=5:
  threadcount=(int)(sys.argv[4])

 

def jin(i,jinzhi):
        finalans=""
        answer=i%jinzhi
        i=int(i/jinzhi)
        if answer>9:
                finalans=finalans+chr(ord('a')+(answer-10))
        else:
                finalans=finalans+str(answer)
        if i!=0:
                finalans=jin(i,jinzhi)+finalans
        return finalans
def urlparse(p,a,c,k):
        d={}
        e=lambda c:     jin(c,36)
        if 1:
                while c:
                        c=c-1
                        if not k[c]:
                                d[jin(c,36)]=jin(c,36)
                        else:
                                d[jin(c,36)]=k[c]
                k=[lambda e:d[e]]
                e=lambda c:'\\w+'
                c=1
        newstr=""
        while c:
                c=c-1
                if k[c]:
                        for i in range(0,len(p)):
                                tempi=p[i]
                                tempi=ord(tempi)
                                if tempi>=ord('a') and tempi                                        newstr+=d[chr(tempi)]
                                elif tempi>=ord('0') and tempi                                        newstr+=d[chr(tempi)]
                                else:
                                        newstr+=chr(tempi)
        return newstr
def meispower(s):
        p=re.compile(r"(?=\}\().*",re.IGNORECASE)
        s=p.findall(s)
        s=s[0]
        s=s[0:(len(s)-19)]
        par=s.split(',')
        par[3]=par[3][1:len(par[3])]
        answer=par[3].split('|')
        chapterpath=urlparse(par[0],int(par[1]),int(par[2]),answer)
        allurl=re.findall('imgpath=[^;]*',chapterpath)[0]
        allurl=allurl[10:(len(allurl)-2)]
        return allurl
def pictofile(weburl,filename,loop=100):
        if loop                print('can\'t download the picture %s'%weburl)
                return
        loop=loop-1
        if os.path.exists(filename):
            return
        try:
                url=urllib.request.urlopen(weburl)
                data=url.read()
                if len(data)                        url.close()
                        pictofile(weburl,filename,loop)
                else:
                        print('download from %s name is %s\n'%(weburl,filename))
                        myfile=open('%s'%filename,'wb')
                        myfile.write(data)
                        myfile.close()
                        url.close();
        except socket.timeout:
                print('timeout')
                pictofile(weburl,filename,loop)
        except Exception as e:
          print('error',e)
          pictofile(weburl,filename,loop)
        finally:
            pass
def downloadpic(url,loadpicdir,num):
    #download the all url picture to loadpicdir
    global currentthreadnum,mutex,mutex2
    mymode=re.compile(r'[0-9a-z.]*\Z')
    try:
                mutex2.acquire()
                os.chdir(loadpicdir)
                mutex2.release()
    except:
                print("can't open the floder %s will be create"%loadpicdir)
                try:
                    if(mutex2.locked()):
                        os.mkdir(loadpicdir)
                        os.chdir(loadpicdir)
                        mutex2.release()
                    print('create floder succeed')
                except:
                    print("can't create floder %s"%loadpicdir)
                    if(mutex.acquire()):
                        mutex.release()
                    quit(0)
    name=mymode.findall(url)
    filename='manhua'+name[0]
    pictofile(url,loadpicdir+'//'+str(num)+'-'+filename)
    mutex.acquire()
    currentthreadnum=currentthreadnum-1
    mutex.release()
def downloadchapter(url,loadpicdir,num,begin=0):
        global manhuaweb,threadcount,currentthreadnum,mutex
        print(manhuaweb+url)
        webdata=urllib.request.urlopen(manhuaweb+url).read()
        webdata=webdata.decode('UTF-8')
        chaptername=re.findall(r'

[^_]*',webdata)[0]<br>        chaptername=chaptername[7:len(chaptername)]<br>        webscrip=re.findall(r'eval.*[^]',webdata)<br>        chapterurl=meispower(webscrip[0]);<br>        chapterurl='http://mhimg.ali213.net'+chapterurl<br>        for i in range(begin,num):<br>                try:<br>                        while(currentthreadnum>=threadcount):<br>                                time.sleep(0.5)<br>                        mutex.acquire()<br>                        currentthreadnum=currentthreadnum+1<br>                        mutex.release()<br>                        threading.Thread(target=downloadpic,args=(r'%s%d.jpg'%(chapterurl,i),loadpicdir+chaptername,num)).start()<br>                except socket.error:<br>                        mutex.acquire()<br>                        i=i-1<br>                        currentthreadnum=currentthreadnum-1<br>                        mutex.release()<br>                except Exception as error:<br>                        print(error,'break')<br>                        print('download chapter %d of picture make a error'%i)<br>                        break<br>if __name__=='__main__':<br>        manhuaweb=r'http://manhua.ali213.net'<br>        socket.setdefaulttimeout(60.0)<br>        mutex=threading.Lock()<br>        mutex2=threading.Lock() <p>        <br>        webfile=urllib.request.urlopen(weburl)<br>        webdata=webfile.read();<br>        webdata=webdata.decode('UTF-8')<br>        meshmode=re.compile(r'</p> <div class="detail_body_right_sec_con">.*</div>')<br>        meshdata=meshmode.findall(webdata)[0]<br>        indexmode=re.compile(r'([0-9]*页)')<br>        indexdata=indexmode.findall(meshdata) <p>        picurlmode=re.compile(r'/comic/[0-9/]*.html')<br>        picurldata=picurlmode.findall(meshdata)</p> <p><br>        chapterlength=len(picurldata)<br>        nummode=re.compile(r'[\d]+')</p> <p>        i=chapterbegin<br>        while i<chapterlength:>                manhuachapter=picurldata[chapterlength-i-1]<br>                downloadchapter(manhuachapter,floder,int(nummode.findall(indexdata[chapterlength-i-1])[0]))<br>                i=i+1<br></chapterlength:></p>
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

トマトの小説漫画を読む方法 トマトの小説漫画を読む方法 Feb 27, 2024 pm 01:13 PM

Tomato Novel ソフトウェアは、非常に豊富な読書プラットフォームであり、多数の小説リソースを提供するだけでなく、さまざまな漫画リソースもカバーしています。コミックに興味があるなら、トマト ノベルズは間違いなく見逃せない選択肢です。ここにはさまざまな種類の漫画があり、リアルタイムで更新されます。好みの作者や作品にかかわらず、正確に見つけることができます。トマトノベルで漫画を読む方法は? このチュートリアルガイドでは、困っている皆さんのお役に立てれば幸いです。トマトの小説漫画を読むには? 1.トマトノベルズアプリを開きます。 2. コミックをクリックします。 3. 好きなコミックを選択し、クリックして視聴します。 4. 下にスワイプして読んでください。

Python クローラーを学ぶのにどれくらい時間がかかりますか Python クローラーを学ぶのにどれくらい時間がかかりますか Oct 25, 2023 am 09:44 AM

Python クローラーの学習にかかる時間は人によって異なり、個人の学習能力、学習方法、学習時間、経験などの要因によって異なります。 Python クローラーを学習するには、テクノロジー自体を学習するだけでなく、優れた情報収集スキル、問題解決スキル、チームワーク スキルも必要です。継続的な学習と実践を通じて、徐々に優れた Python クローラー開発者に成長していきます。

PHP クローラーの一般的な問題の分析と解決策 PHP クローラーの一般的な問題の分析と解決策 Aug 06, 2023 pm 12:57 PM

PHP クローラーの一般的な問題と解決策の分析 はじめに: インターネットの急速な発展に伴い、ネットワーク データの取得はさまざまな分野で重要なリンクになっています。 PHP は広く使用されているスクリプト言語であり、データ取得において強力な機能を備えており、よく使用されるテクノロジの 1 つがクローラーです。ただし、PHP クローラーを開発および使用する過程で、いくつかの問題に遭遇することがよくあります。この記事では、これらの問題を分析して解決策を示し、対応するコード例を示します。 1. 対象のWebページのデータが正しく解析できない問題の説明。

クローラーのヒント: PHP で Cookie を処理する方法 クローラーのヒント: PHP で Cookie を処理する方法 Jun 13, 2023 pm 02:54 PM

クローラー開発では、Cookie の処理が重要な部分となることがよくあります。 HTTP の状態管理メカニズムとして、Cookie は通常、ユーザーのログイン情報と行動を記録するために使用され、クローラーがユーザー認証を処理し、ログイン ステータスを維持するための鍵となります。 PHP クローラー開発では、Cookie を処理するには、いくつかのスキルを習得し、いくつかの落とし穴に注意する必要があります。ここでは、PHP での Cookie の扱い方について詳しく説明します。 1. PHP記述時のCookieの取得方法

アニメホームで漫画が読めないのはなぜですか? アニメホームで漫画が読めないのはなぜですか? Mar 20, 2024 pm 10:56 PM

アニメホームというソフトでは自分で漫画を検索して読むことができますが、アニメホームで漫画が読めない理由が分からないというユーザーもいますが、他のアプリで漫画の著作権を購入している場合は読むことができません。次に編集者がユーザーに読めない漫画を持ってくる理由を紹介、興味のあるユーザーは見に来てください!アニメホームで漫画が見れないのはなぜですか? 回答: 著作権変更のため漫画が見れません 詳細: 1. ソフトウェア内で読みたい漫画を検索します。 2. 漫画の内容は表示されません。二次創作であるか、直接見つけることができません。 3. b駅のコミックセンターでしか読めないなど、他のソフトに著作権が購入されている可能性があります。 4. 著作権の変更により、一部の漫画は利用できなくなり、著作権で保護されたソフトウェアでのみ読むことができます。

効率的な Java クローラーの実践: Web データ クローリング技術の共有 効率的な Java クローラーの実践: Web データ クローリング技術の共有 Jan 09, 2024 pm 12:29 PM

Java クローラーの実践: Web ページ データを効率的にクロールする方法 はじめに: インターネットの急速な発展に伴い、大量の貴重なデータがさまざまな Web ページに保存されています。このデータを取得するには、多くの場合、各 Web ページに手動でアクセスして情報を 1 つずつ抽出する必要がありますが、これは間違いなく退屈で時間のかかる作業です。この問題を解決するために、人々はさまざまなクローラー ツールを開発しましたが、その中で Java クローラーは最もよく使用されているツールの 1 つです。この記事は、Java を使用して効率的な Web クローラーを作成する方法を読者に理解させ、具体的なコード例を通じてその実践方法を示します。 1. 爬虫類の根元

PHP を使用して Douban の映画レビューをクロールするためのチュートリアル PHP を使用して Douban の映画レビューをクロールするためのチュートリアル Jun 14, 2023 pm 05:06 PM

フィルム市場が拡大発展し続けるにつれて、フィルムに対する人々の需要もますます高まっています。映画の評価に関しては、Douban Film Critics が常により権威があり、人気のある選択肢です。場合によっては、Douban 映画レビューに対して特定の分析と処理を実行する必要があるため、クローラー テクノロジーを使用して Douban 映画レビューに関する情報を取得する必要があります。この記事では、PHP を使用して Douban の映画レビューをクロールする方法のチュートリアルを紹介します。参考にしてください。 Douban 映画のページ アドレスを取得する Douban 映画のレビューをクロールする前に、Douban 映画のページ アドレスを取得する必要があります。わかりました

Web ページ データを効率的にクロールする: PHP と Selenium の併用 Web ページ データを効率的にクロールする: PHP と Selenium の併用 Jun 15, 2023 pm 08:36 PM

インターネット技術の急速な発展に伴い、Web アプリケーションは私たちの日常の仕事や生活でますます使用されるようになりました。 Web アプリケーション開発のプロセスにおいて、Web ページ データのクロールは非常に重要なタスクです。市場には多くの Web スクレイピング ツールがありますが、これらのツールはあまり効率的ではありません。 Web ページデータのクローリングの効率を向上させるために、PHP と Selenium を組み合わせて使用​​できます。まず、PHP と Selenium とは何かを理解する必要があります。 PHPは強力です

See all articles