Le processus d'étude et de référence, s'il vous plaît respecter les lois et règlements pertinents.
Tout d'abord, nous analysons le site: https: //www.mzitu.com/all/
Pas difficile à trouver, contient un grand nombre de liens d'image sur cette page, on peut dire d'être particulièrement pratique pour prendre des photos de notre ascension, cela est une bonne chose. Nous continuons donc d'analyser
Ceci est l'adresse de la première page
Ceci est la deuxième page, donc quand nous avons rampé seulement besoin d'ajouter « / num » pour relier plus tard
Alors Arrivons ramper contenu de la page d'accueil
importation des demandes d' importation re # 爬取首页 url = ' https://www.mzitu.com/all/ ' en- tête = { ' User-Agent ' : " Mozilla / 5.0 (Windows NT 10.0, Win64, x64; rv: 74,0) Gecko / 20100101 Firefox / 74,0 ' } réponse = requests.get (url, headers = tête) .text impression (réponse)
Nous pouvons obtenir ce qui suit
ok alors nous devons extrayez les liens que nous voulons
# Utilisez des expressions régulières pour extrayez les liens nécessaires
req = '<br> *日:.? (.? *) <a href="(.*?)" target="_blank"> </a>'
urls = re.findall (req, réponse)
pour l' URL , pic_name à urls:
print (url, pic_name)
Nous obtenons donc nous avons besoin d'un lien
Donc, nous devons savoir à chaque maillon de la fin qui est combien de pages il
Nous observons une analyse plus approfondie du code source de la page web, nous pouvons trouver
Nous pouvons extraire de la page à la dernière page de contenu
req = ' <br> *日:.? (.? *) <a href="(.*?)" target="_blank"> </a> ' urls = re.findall (req, réponse) pour url , pic_name à urls: print (url, pic_name) # 获取每个url内的总页面数目 html = requests.get (url, headers = tête) .text req_last = " <a href='.*?'> <span > & laquo;上一组</ span> </a> <span> 1 </ span> <a href='.*?'> <span> 2 </ span> </a> <a href = ». *?> <span> 3 </ span> <a </a> href='.*?'> <span> 4 </ span> </a> <span class = 'points> ... </ span ><a href='.*?'> <span> </ span> <a </a> href='.*?'> <span> 下一页 & raquo (*.?); </ span> </ a> </ div> " LAST_NUM =re.findall (req_last, html) impression (LAST_NUM) sortie ()
Nous utiliserons la dernière étant nécessaire pour extraire le numéro de page que vous pouvez obtenir des résultats
Ensuite, l'étape suivante consiste à raccorder l'URL
Nous essayons d'ajouter après la première page de l'URL d'origine « / 1 » découverte peut également accéder à la page nous en avons besoin réduit considérablement la quantité de code
# Liste en entier pour K à LAST_NUM: K = K K = int (K) # URL de raccordement pour I dans Range (. 1 , K): url_pic = URL + ' / ' + STR (I) Imprimer (url_pic) sortie ()
ps: Ici « exit () » est pour la commodité de la procédure de test peut être aussi longtemps que suivant l'adresse d'un maître sera omise url
Nous pouvons obtenir le lien suivant
Ces liens ouvrent sont valables, mais nous ne sommes pas directement l'image url ouverte
Par conséquent, nous allons continuer à filtrer les informations, puis optimiser le code
# Liste en entier pour K à LAST_NUM: K = K K = int (K) # URL de raccordement pour I dans Plage (1. , K): url_pic = URL + ' / ' + STR (I) headerss = { ' l'utilisateur -agent ' : ' "Mozilla / 5.0 (Windows NT 6.3; WOW64) AppleWebKit / 537,36 (KHTML, comme Gecko) Chrome / Safari 39.0.2171.95 / 537,36" ' ' Referer ' : url_pic, ' Host ' : ' www.mzitu.com ' } html_pic_last = requests.get (url_pic, headers = headerss) .text req_last_pic = ' <.? = Classe div *> <p> <a href = *.? > <img src = "(. *)" alt =. *? width =. *? hauteur =. *? /> </a> </ p> ' req_pic_url = re.findall (req_last_pic, html_pic_last) pour liaison en req_pic_url:requests.get (liens, headerss) .content impression (image_content) # avec open ( "image /" + pic_name + str (i) + ".jpg", "wb") comme f: # f.write (image_content) sortie ( )
Mais après le test, je trouve les images conservées ne peut pas être ouvert, re-examen a révélé la dernière étape pour télécharger l'image lorsqu'une erreur 403 se produit: Access Server Refusé
J'ai essayé de Herder, mais ne fonctionne toujours pas, de sorte que le GG!
Tout d'abord placé, donc après une analyse plus approfondie des motifs 403.
Jusqu'à présent, tout le code source jointe
L' importation Demandes d' importation Re # rampants Accueil url_head = ' https://www.mzitu.com/all/ ' en- tête = { ' l'agent User-- ' : ' Mozilla / 5.0 (Windows NT 10.0, Win64, x64-, RV: 74,0) le Gecko / Firefox 20100101 / 74,0 ' ' le Referer ' : ' https://www.mzitu.com ' } Réponse = requests.get (url_head, headers = tête) .text # expressions régulières pour extrayez les liens nécessaires REQ = ' . <br> * jour: <a href = "(. *?)" target = "_blank "> (. *?) </a>' Urls = re.findall (req, réponse) pour url, pic_name dans urls: # 获取每个url内的总页面数目 html = requests.get (url, headers = tête) .text req_last = " <a href =' . * '> <span> & laquo;?上一组</ span> </a> <span> 1 </ span> <a href='.*?'> <span> 2 </ span> </ a > <a href='.*?'> <span> 3 </ span> </a> <a href='.*?'> <span> 4 </ span> </a> <span class = » points> ... </ span> <a href='.*?'> <span> (. *) </ span> <a </a> href='.*?'> <span>下一页& raquo; </ span> </a> </ div> " LAST_NUM = le re.findall (req_last, HTML) # liste en entier pour K à LAST_NUM: K= K k = int (k) # 拼接URL pour i dans plage (1 , k): url_pic = url + ' / ' + str (i) headerss = { ' User-Agent ' : ' « Mozilla / 5.0 (Windows NT 6,3; WOW64) AppleWebKit / 537,36 (KHTML, comme Gecko) Chrome / 39.0.2171.95 Safari / 537,36" ' ' Referer ' : url_pic, } html_pic_last = requests.get (url_pic, headers = headerss) .text req_last_pic = ' <= classe div. *?> <p> <a href =. *? > <img src = "(. *)" alt =. *? width =. *? hauteur =. *? /> </a> </ p> ' req_pic_url = re.findall (req_last_pic, html_pic_last) pour lien dans req_pic_url: link = lien liens = str (lien) impression (liens) image_content = requests.get (liens, headerss). contenu imprimé (image_content) # avec open ( "image /" + pic_name + str (i) + ".jpg", "wb") comme f: exit () exit ()