Maison > Article > développement back-end > Python crawler [1] Téléchargez des photos de filles par lots
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
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
#3 Cependant, un navigateur pour. la visualisation du code source et la visualisation des éléments sont toujours nécessaires, comme
chr
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
import urllib.request
res = urllib.request.urlopen(url)
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
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.
variable
Lisez maintenant le code html dans l'objet res et affectez-le à lahtml. Utilisez la méthode res.read().
html = res.read()
À l'heure actuelle, le code source html est stocké en html ! Essayez imprimer(html)
À 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 enhtml = res.read().decode('utf-8' )
Puis imprimer(html)
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()
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 .
É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.
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.
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 :
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' ) )
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 ~
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!