Reptile réel - Crawling mzitu.com (empochant le cas tragique de l'échec)

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 ()

 

Je suppose que tu aimes

Origine www.cnblogs.com/mrkr/p/12521641.html
conseillé
Classement