Comment explorer plus de 1000 images Baidu? Tutoriel de robot d'exploration Python avec code

Comment utiliser Python pour explorer des images Baidu?

Environnement expérimental:
bibliothèque tierce Python 3.x : demande 2.14.2

1. Tout d'abord, ouvrez Baidu, entrez des mots-clés pour rechercher les photos requises (ici, prenez les balances électroniques comme exemple)

Insérez la description de l'image ici

Lorsque vous tirez vers le bas, vous pouvez voir que l'image est chargée à mesure que la page Web glisse vers le bas. Il s'agit d'une page de chargement dynamique. Cela pose problème. Si vous vérifiez le code source de la page, vous ne trouverez pas l'URL de l'image. Que puis-je faire? N'ayez pas peur, nous devons d'abord comprendre le principe du chargement dynamique. Le chargement dynamique consiste à insérer des données d'image dans les balises HTML de la page Web en exécutant javascript, de sorte que nous ne pouvons pas voir les informations de l'image dans le code source. Mais l'image peut être chargée dans la page Web, indiquant que la demande de page Web a un paquet de données, et l'url de l'image peut être trouvée tant que le fichier stockant les informations de données est trouvé.

2. Ensuite, vérifiez le paquet de données et trouvez l'url de l'image

Maintenant, par exemple, recherchez l'image Baidu de la balance électronique, cliquez sur l' outil de développement Web , cliquez sur le réseau et faites glisser vers le bas sur la page d'image, et vous trouverez plusieurs images chargées et plus acjson? Tn = resultjson & ipn =. .. fichiers demandés, puis cliquez sur l' aperçu du fichier et vous verrez un morceau de données json, cliquez dessus et vous trouverez plus de 30 morceaux de données, et cliquez à nouveau dessus et vous constaterez que chaque élément de données contient des informations détaillées sur une image.
Insérez la description de l'image ici

Pour le moment, vous constaterez qu'il n'y a que 30 éléments de données dans chaque fichier. Comment pouvez-vous obtenir plus de 1000 éléments de données? Voyons ensuite la différence. Il y a quatre fichiers acjson? Tn = resultjson & ipn =… dans l' image ci-dessus. Si vous y réfléchissez bien, vous obtenez 30 éléments de données pour chaque demande, et les données demandées sont différentes à chaque fois. L'URL demandée doit être confirmée. Elle est également différente. Rassemblez les URL de ces quatre fichiers comme suit:

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8615903434039220370&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%94%B5%E5%AD%90%E7%A7%A4&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=%E7%94%B5%E5%AD%90%E7%A7%A4&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1614774604107=
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8615903434039220370&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%94%B5%E5%AD%90%E7%A7%A4&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=%E7%94%B5%E5%AD%90%E7%A7%A4&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&1614774604251=
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8615903434039220370&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%94%B5%E5%AD%90%E7%A7%A4&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=%E7%94%B5%E5%AD%90%E7%A7%A4&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&force=&pn=90&rn=30&gsm=5a&1614774716612=
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8615903434039220370&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%94%B5%E5%AD%90%E7%A7%A4&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=%E7%94%B5%E5%AD%90%E7%A7%A4&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&force=&pn=120&rn=30&gsm=78&1614774716744=

Il n'est pas difficile de constater que tout est pareil à l'exception des deux premières lettres de pn et gsm. pn est augmenté par pas de 30, et les deux premières lettres de gsm sont les deux chiffres du nombre hexadécimal de pn.

Troisièmement, le code expérimental

Importer la bibliothèque

import requests
import time

Simuler le navigateur

# 请求头,伪装成浏览器
headers = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
keyword = '电子秤' # 关键字
max_page = 34 
i=1 # 记录图片数

Créez un dossier et placez-le dans le même répertoire que le fichier de code, explorez et téléchargez des images

for page in range(1,max_page+1):
    page = page*30
    # 网址
    url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord='\
            +keyword+'&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word='\
            +keyword+'&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=wallpaper&pn='\
            +str(page)+'&rn=30&gsm=1e&1596899786625='
    # 请求响应
    response = requests.get(url=url,headers=headers)
    # 得到相应的json数据
    json = response.json()
    if json.get('data'):
        for item in json.get('data')[:30]:
            # 图片地址
            img_url = item.get('thumbURL')
            # 获取图片
            image = requests.get(url=img_url)
            # 下载图片
            with open('./电子秤图片/%d.jpg' %i,'wb') as f:
                f.write(image.content) # 图片二进制数据
            time.sleep(1) # 等待1s
            print('第%d张%s图片下载完成...'%(i,keyword))
            i+=1
print('End!')

Quatrièmement, explorez les résultats

Exploration réussie de plus de 1000 images dans le dossier spécifié
Insérez la description de l'image ici

Référence des données
Livre court: Encre cachée laissée vierge
Lien: https://www.jianshu.com/p/e7031f06307c

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44763047/article/details/114340943
conseillé
Classement