Maison développement back-end Tutoriel Python python实现爬虫下载漫画示例

python实现爬虫下载漫画示例

Jun 06, 2016 am 11:29 AM
bandes dessinées 爬虫

代码如下:


#!/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>
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Combien de temps faut-il pour apprendre le robot d'exploration Python Combien de temps faut-il pour apprendre le robot d'exploration Python Oct 25, 2023 am 09:44 AM

Le temps nécessaire pour apprendre les robots d'exploration Python varie d'une personne à l'autre et dépend de facteurs tels que la capacité d'apprentissage personnelle, les méthodes d'apprentissage, le temps d'apprentissage et l'expérience. L'apprentissage des robots d'exploration Python ne consiste pas seulement à apprendre la technologie elle-même, mais nécessite également de bonnes compétences en matière de collecte d'informations, de résolution de problèmes et de travail d'équipe. Grâce à un apprentissage et à une pratique continus, vous deviendrez progressivement un excellent développeur de robots Python.

Comment lire des bandes dessinées de romans Tomato Comment lire des bandes dessinées de romans Tomato Feb 27, 2024 pm 01:13 PM

Le logiciel Tomato Novel est une plateforme de lecture très riche. En plus de fournir un grand nombre de ressources romanes, il couvre également une variété de ressources de bandes dessinées. Si vous êtes intéressé par la bande dessinée, Tomato Novels est définitivement un choix à ne pas manquer. Il existe de nombreux types de bandes dessinées ici, qui sont mises à jour en temps réel. Qu'il s'agisse de l'auteur ou de l'œuvre que vous aimez, vous pouvez la trouver avec précision. Alors, comment lire des bandes dessinées sur Tomato Novel ? les étapes. J’espère que cela pourra aider tous ceux qui en ont besoin. Comment lire les bandes dessinées du roman Tomato ? 1. Ouvrez l'application Tomato Novels. 2. Cliquez sur la bande dessinée. 3. Sélectionnez la bande dessinée que vous aimez et cliquez pour la regarder. 4. Faites glisser votre doigt vers le bas pour lire.

Analyse et solutions aux problèmes courants des robots PHP Analyse et solutions aux problèmes courants des robots PHP Aug 06, 2023 pm 12:57 PM

Analyse des problèmes courants et solutions pour les robots PHP Introduction : Avec le développement rapide d'Internet, l'acquisition de données réseau est devenue un maillon important dans divers domaines. En tant que langage de script largement utilisé, PHP possède de puissantes capacités d’acquisition de données. L’une des technologies couramment utilisées est celle des robots d’exploration. Cependant, lors du développement et de l’utilisation des robots d’exploration PHP, nous rencontrons souvent des problèmes. Cet article analysera et proposera des solutions à ces problèmes et fournira des exemples de code correspondants. 1. Description du problème selon lequel les données de la page Web cible ne peuvent pas être correctement analysées.

Conseils pour les robots : comment gérer les cookies en PHP Conseils pour les robots : comment gérer les cookies en PHP Jun 13, 2023 pm 02:54 PM

Dans le développement de robots d'exploration, la gestion des cookies est souvent une partie essentielle. En tant que mécanisme de gestion d'état dans HTTP, les cookies sont généralement utilisés pour enregistrer les informations de connexion et le comportement des utilisateurs. Ils constituent la clé permettant aux robots d'exploration de gérer l'authentification des utilisateurs et de maintenir l'état de connexion. Dans le développement de robots PHP, la gestion des cookies nécessite de maîtriser certaines compétences et de prêter attention à certains pièges. Ci-dessous, nous expliquons en détail comment gérer les cookies en PHP. 1. Comment obtenir un cookie lors de l'écriture en PHP

Pourquoi ne puis-je pas lire des bandes dessinées dans Anime Home ? Pourquoi ne puis-je pas lire des bandes dessinées dans Anime Home ? Mar 20, 2024 pm 10:56 PM

Vous pouvez rechercher et lire des bandes dessinées par vous-même dans le logiciel Anime Home. Certains utilisateurs ne savent toujours pas pourquoi ils ne peuvent pas lire les bandes dessinées dans Anime Home. Si les droits d'auteur des bandes dessinées sont achetés par d'autres applications, ils ne peuvent pas les lire. Ensuite, l'éditeur propose aux utilisateurs les bandes dessinées qu'ils ne savent pas lire. Une introduction aux raisons, les utilisateurs intéressés viennent y jeter un œil ! Pourquoi ne puis-je pas regarder des bandes dessinées dans Anime Home ? Réponse : Je ne peux pas regarder des bandes dessinées en raison de modifications des droits d'auteur. Détails : 1. Recherchez les bandes dessinées que vous souhaitez lire dans le logiciel. 2. Le contenu de la bande dessinée n'apparaîtra pas. Il peut s'agir d'une deuxième création ou ne peut pas être trouvé directement. 3. Le droit d'auteur peut avoir été acheté par d'autres logiciels. Par exemple, il ne peut être lu que dans le centre de bandes dessinées de la station b. 4. En raison de modifications des droits d'auteur, certaines bandes dessinées ne sont plus disponibles et ne peuvent être lues que sur des logiciels protégés par le droit d'auteur.

Pratique efficace du robot d'exploration Java : partage des techniques d'exploration de données Web Pratique efficace du robot d'exploration Java : partage des techniques d'exploration de données Web Jan 09, 2024 pm 12:29 PM

Pratique du robot d'exploration Java : Comment explorer efficacement les données d'une page Web Introduction : Avec le développement rapide d'Internet, une grande quantité de données précieuses est stockée dans diverses pages Web. Pour obtenir ces données, il est souvent nécessaire d’accéder manuellement à chaque page web et d’en extraire les informations une par une, ce qui est sans doute une tâche fastidieuse et chronophage. Afin de résoudre ce problème, les utilisateurs ont développé divers outils de robots d'exploration, parmi lesquels le robot d'exploration Java est l'un des plus couramment utilisés. Cet article amènera les lecteurs à comprendre comment utiliser Java pour écrire un robot d'exploration Web efficace et à démontrer la pratique à travers des exemples de code spécifiques. 1. La base du reptile

Tutoriel sur l'utilisation de PHP pour explorer les critiques de films Douban Tutoriel sur l'utilisation de PHP pour explorer les critiques de films Douban Jun 14, 2023 pm 05:06 PM

À mesure que le marché du film continue de s'étendre et de se développer, la demande de films est également de plus en plus élevée. En ce qui concerne l'évaluation des films, Douban Film Critics a toujours été un choix plus faisant autorité et plus populaire. Parfois, nous devons également effectuer certaines analyses et traitements sur les critiques de films Douban, ce qui nécessite l'utilisation d'une technologie d'exploration pour obtenir des informations sur les critiques de films Douban. Cet article présentera un didacticiel sur la façon d'utiliser PHP pour explorer les critiques de films Douban pour votre référence. Obtenez l'adresse de la page des films Douban. Avant d'explorer les critiques de films Douban, vous devez obtenir l'adresse de la page des films Douban. D'ACCORD

Pratique PHP : exploration des données du barrage Bilibili Pratique PHP : exploration des données du barrage Bilibili Jun 13, 2023 pm 07:08 PM

Bilibili est un site Web de vidéos de barrage populaire en Chine. C'est également un trésor contenant toutes sortes de données. Parmi elles, les données de barrage sont une ressource très précieuse, c'est pourquoi de nombreux analystes de données et chercheurs espèrent obtenir ces données. Dans cet article, je présenterai l'utilisation du langage PHP pour explorer les données du barrage Bilibili. Travail de préparation Avant de commencer à explorer les données du barrage, nous devons installer un framework de robot d'exploration PHP Symphony2. Vous pouvez entrer via la commande suivante

See all articles