Maison  >  Article  >  développement back-end  >  Python crawler [1] Téléchargez des photos de filles par lots

Python crawler [1] Téléchargez des photos de filles par lots

PHPz
PHPzoriginal
2017-04-04 10:49:545085parcourir

Les photos de filles présentées sur Jiedan.com ont des beautés de très haute qualitéPhotos , aujourd'hui, je vais partager les connaissances et les outils que vous devez connaître pour utiliser python pour télécharger ces photos de filles par lots :

#1

Obligatoire. la syntaxe de base de python. Pour cet article, il vous suffit de savoir comment faire fonctionner list, for…in…, et comment définir la fonction . Apprenez les fonctions d'exploration, d'analyse et d'enregistrement des fichiers au fur et à mesure que vous les utilisez. ulSoup4 Il est très pratique d'installer en utilisant pip La dernière version de python est livrée avec l'outil pip. Windows pour ouvrir l'invite de commande (administrateur) et entrez

pip install beautifulsoup4

Appuyez sur Entrée et exécutez

Installé avec succès ou quelque chose comme ça apparaît Le message d'invite indique que l'installation est terminée

#3Python crawler [1] Téléchargez des photos de filles par lots Cependant, un navigateur pour. la visualisation du code source et la visualisation des éléments sont toujours nécessaires, comme
chr

ome et firefox


(Si vous n'avez pas pip, veuillez

recherchez

comment installer. pip.)

1. Télécharger une page WebVous voulez en télécharger deux Pour toutes les images sur plus d'un millier de pages Web, vous devez d'abord apprendre à télécharger une page Web :) Entraînez-vous L'URL de téléchargement est : jandan.net/ooxx/page-2397#comments. Utilisez le navigateur Chrome ou Firefox. Après l'ouverture, cliquez avec le bouton droit de la souris pour afficher le code source de la page Web. qui nous est présenté par le navigateur après avoir analysé le code source écrit en html,

js

, css, etc. L'adresse est incluse dans ces codes sources, la première étape consiste donc à télécharger ces codes html 🎜><.>

Partie interceptée du code


Utiliser La bibliothèque intégrée urllib.request de python pour télécharger des pages Web urllib.request est une bibliothèque extensible qui utilise plusieurs protocoles pour accéder et ouvrir les URL.

Python crawler [1] Téléchargez des photos de filles par lots
import urllib.request


url = 'http://jandan.net/ooxx/page-2397#comments'


res = urllib.request.urlopen(url)

Python crawler [1] Téléchargez des photos de filles par lots
urllib.request.urlopen() Que fait cette fonction ? Comme son nom l’indique, il peut être utilisé pour ouvrir une URL. Il peut accepter soit une str (c'est ce que nous avons passé) soit un objet Request

. La valeur de retour de cette
fonction

est toujours un objet qui peut fonctionner comme un gestionnaire de contexte et possède ses propres méthodes telles que geturl(), info() et getcode().

En fait, nous n'avons pas à nous soucier de grand-chose. Il faut juste rappeler que cette fonction peut accepter une URL puis nous renvoyer un objet contenant toutes les informations de cette URL. opérer sur cet objet.


Lisez maintenant le code html dans l'objet res et affectez-le à la

variable

html. Utilisez la méthode res.read().

html = res.read()

À l'heure actuelle, le code source html est stocké en html ! Essayez imprimer(html)



Partie interceptée du code.

À ce stade, vous constatez que le résultat est différent du contenu qui apparaît lorsque vous cliquez avec le bouton droit de la souris et affichez le code source de la page Web. Il s'avère que la valeur de retour de la méthode read() est de n octets... Qu'est-ce que c'est ? Eh bien, en fait, nous pouvons analyser cette valeur de retour et obtenir l'adresse de l'image. Mais si vous souhaitez obtenir le même code html que celui que vous voyez dans le navigateur, vous pouvez modifier la ligne de code précédente en

html = res.read().decode('utf-8' )

Puis imprimer(html)


Python crawler [1] Téléchargez des photos de filles par lots


Une partie du code a été interceptée.

D'accord ! De même, c'est parce que le decode('utf-8') de read() peut coder la valeur de retour de read() en utf-8. Mais nous utilisons toujours html = res.read() car il contient également les informations dont nous avons besoin.

Jusqu'à présent, nous n'avons utilisé que 4 lignes de code python pour télécharger et stocker le code html de la page Web http://jandan.net/ooxx/page-2397#comments dans la variable html. Comme suit :

import urllib.request

#Télécharger la page web

url = 'http://jandan.net/ooxx/page- 2397# commentaires'

res = urllib.request.urlopen(url)

html = res.read()

2. Analyser l'adresse

Ensuite, utilisez beautifulsoup4 pour analyser le HTML.

Comment déterminer où se trouve le code html correspondant à une certaine image ? Faites un clic droit sur la page - Inspecter. À l'heure actuelle, la moitié gauche de l'écran est la page Web d'origine, et la moitié droite de l'écran est le code html et un tas de boutons de fonction .


Python crawler [1] Téléchargez des photos de filles par lots


Éléments Il y a une flèche de sélection à gauche, cliquez dessus et elle devient bleu, puis cliquez sur l'image dans la page Web à gauche, vous pouvez voir qu'une partie du code dans le code html à droite est automatiquement mise en surbrillance. Cette partie du code est le code html correspondant à cette image ! Cette flèche permet de localiser le code correspondant à un élément dans la page web.


Python crawler [1] Téléchargez des photos de filles par lots


Regardez attentivement ce code :

Vous pouvez voir La partie src="//wx2.sinaimg.cn/mw600/66b3de17gy1fdrf0wcuscj20p60zktad.jpg" est l'adresse de cette image, et src est la source. Le style après src est son style, ne vous inquiétez pas. Vous pouvez l'essayer en ce moment, ajoutez http: avant src, visitez http://wx2.sinaimg.cn/mw600/66b3de17gy1fdrf0wcuscj20p60zktad.jpg et vous devriez pouvoir voir l'image originale.


Ainsi, le contenu correspondant à src est l'adresse du lien image dont nous avons besoin. Notez que dans l'image, le src et le lien d'adresse de l'image, le style et la max-width sont similaires à la key-value. Ceci est lié à la méthode utilisée ultérieurement pour extraire l’adresse de l’image.

Regardez les codes correspondant aux autres images. Vous pouvez voir que leurs formats sont les mêmes, c'est-à-dire qu'ils sont tous inclus dans .

Utilisez BeautifulSoup() pour analyser le HTML. En plus de transmettre du HTML, nous transmettons également un paramètre 'html.parser', qui indique que nous voulons que la fonction BeautifulSoup() analyse la variable html selon la méthode d'analyse du HTML. Parser signifie analyse syntaxique.

soup = BeautifulSoup(html,'html.parser')

Cette ligne de code analyse le HTML en un objet soupe. Nous pouvons opérer sur cet objet très facilement. Par exemple, extrayez uniquement le contenu texte contenant « img » :

result = soup.find_all('img')

Utilisez la méthode find_all().

print(result) Vous pouvez voir que le résultat est une liste et que chaque élément est une paire clé-valeur d'adresse src-image, mais il contient ce n'est pas nécessaire.


Python crawler [1] Téléchargez des photos de filles par lots


a intercepté une partie du code.

Utilisez la méthode get pour extraire l'adresse entre guillemets doubles et ajoutez http: au début.

links=[]

pour le contenu dans le résultat :

links.append('http:'+content .get('src'))

content.get('src') consiste à obtenir la valeur correspondant à la clé src dans le contenu, c'est-à-dire l'adresse entre guillemets doubles.

links.append() est une méthode courante pour ajouter des éléments à une liste.

print(links) Vous pouvez voir que chaque élément de cette liste est l'adresse de l'image originale entre guillemets doubles. Comme indiqué ci-dessous :


Python crawler [1] Téléchargez des photos de filles par lots


Partie interceptée du code

Utilisez un navigateur pour ouvrir n'importe quelle adresse et vous pourrez voir l'image correspondante ! OUI ! Cela signifie que nous en sommes à la dernière étape : les télécharger !

La partie extraction d'adresse est terminée. Le code est également assez concis, comme suit :

Page Web #Parse

depuis bs4 import BeautifulSoup

soup = BeautifulSoup(html,'html.parser')

result = soupe . find_all('img')

links=[]

pour le contenu dans le résultat :

links.append('http:'+content.get('src' ) )

3. Téléchargez les photos

La dernière étape consiste à visiter les adresses dans les liens dans l'ordre et à télécharger les photos !

Au début

importer os

Créez d'abord un dossier photo pour stocker les images téléchargées. Le code suivant créera le dossier photo dans celui-ci. Le fichier programme.py est localisé.

sinon os.path.exists('photo'):

os.makedirs('photo')

Nous savons que les liens sont une liste, il est donc préférable d'utiliser loop pour les télécharger, les nommer et les stocker un par un.



i=0

pour lien dans les liens :

i+=1

filename ='photo\'+'photo'+str(i)+'.png'

avec open(filename,'w' ) en tant que fichier :

urllib.request.urlretrieve(link,filename)

i est une variable de boucle, i+=1 est une instruction pour contrôler la boucle.

filename nomme l'image, mais il crée d'abord un fichier avec ce nom, puis y écrit l'image. Comme le montre la déclaration d'affectation du nom de fichier, « photo » indique qu'il se trouve dans le dossier photo et la « photo » + str(i) suivante est à commander. Une fois le téléchargement complet terminé, il apparaîtra. comme photo1, photo2 et photo3 ~ '.png' est le suffixe. Utiliser le signe + pour connecter des chaînes est également une pratique courante en python.

avec ces deux lignes de déclarations, obtenez localement l'image pointée par l'adresse dans le lien, puis stockez-la dans le nom de fichier.

open(filename,'w'), ouvrez le dossier du nom de fichier, 'w' signifie que la méthode d'ouverture est l'écriture. C'est-à-dire que open() accepte ici deux paramètres, l'un est le nom du fichier (chemin du fichier) et l'autre est la méthode d'ouverture.

La fonction de urllib.request.urlretrieve(link,filename) est d'accéder au lien lien, puis d'en récupérer une copie et de la placer dans le nom de fichier.

Après avoir écrit les 3 parties, cliquez sur Exécuter ! Vous pouvez trouver le dossier photo dans le chemin où se trouve le fichier .py, qui contient les images que nous avons téléchargées ~


Python crawler [1] Téléchargez des photos de filles par lots


Le code complet est le suivant :

import urllib.request

from bs4 import BeautifulSoup

importer os

#Télécharger la page Web

url = 'http://jandan.net/ooxx/page-2397#comments'

res = urllib.request.urlopen (url)

html = res.read()

#Parse page web

soup = BeautifulSoup(html,'html.parser')

result = soup.find_all('img ')

links=[]

pour le contenu dans le résultat :

links.append('http:'+content.get( 'src'))

#Télécharger et stocker les images

sinon os.path.exists('photo'):

os.makedirs('photo')

i=0

pour lien dans les liens :

i+=1

filename ='photo\'+'photo'+str(i)+ '.png'

avec open(filename,'w') comme fichier :

urllib.request.urlretrieve(link,filename)

Ce petit programme est considéré comme orienté processus. De haut en bas, aucune fonction n'est définie. Cela peut être plus facile à comprendre pour les débutants.

Lien vers la photo de la fille

http://jandan.net/ooxx/page-2397#comments Seul le numéro du milieu changera entre 1 et 2XXX.

url = 'http://jandan.net/ooxx/page-'+str(i)+'#comments'

Changez simplement la valeur de i Téléchargé par lots. Cependant, certains commentaires disent que des visites fréquentes sur ce site Web peuvent entraîner le blocage de votre adresse IP. Je ne comprends pas cela, alors essayez-le vous-même !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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