Utilisez Python pour créer un téléchargeur automatique d'images en 5 minutes

怪我咯
Libérer: 2017-06-23 14:26:19
original
1526 Les gens l'ont consulté


Pratique du robot d'exploration Python - téléchargeur automatique d'images

Étapes de base pour créer un robot d'exploration

D'ailleurs, grâce à ce petit exemple, vous pouvez maîtriser quelques étapes de base pour créer un robot.

D'une manière générale, réaliser un robot nécessite les étapes suivantes :

  1. Analyser les exigences (oui, l'analyse des exigences est très importante, ne me dites pas que votre professeur ne l'a pas fait t'apprendre )

  2. Analyser le code source de la page Web et coopérer avec F12 (le code source de la page Web n'est pas aussi compliqué que F12, tu veux me voir à mort ?)

  3. Expressions régulières écrites ou expressions XPath (l'artefact mentionné précédemment)

  4. Écrire formellement du code de robot d'exploration Python

Effet

Exécuter :

Eh bien, laissez-moi entrer des mots-clés et laissez-moi y réfléchir, que dois-je saisir ? Cela semble être un peu exposé.

Entrer

Il semble que le téléchargement ait commencé ! Super! , j'ai regardé les photos téléchargées, et wow, j'ai instantanément eu l'impression d'avoir ajouté beaucoup d'émoticônes....

D'accord, c'est à peu près tout.

Analyse des besoins

"Je veux des photos, mais je ne veux pas chercher en ligne"
"Il est préférable de les télécharger automatiquement"
......

Voici les exigences, d'accord, commençons à analyser les exigences. Au moins deux fonctions doivent être implémentées, l'une consiste à rechercher des images et l'autre à télécharger automatiquement.

Tout d'abord, lors de la recherche d'images, la chose la plus simple à laquelle penser est le résultat de l'exploration des images Baidu. D'accord, allons sur les images Baidu pour voir

.

C'est en gros ça, assez beau.

Essayons de rechercher quelque chose. Je tape un gros mot et une série de résultats de recherche apparaît. Qu'est-ce que cela signifie....

Trouvez-en juste une Entrez

D'accord, nous avons vu beaucoup de photos, ce serait génial si nous pouvions parcourir toutes les photos ici. On voit qu'il y a des informations sur le mot clé dans l'URL

On essaie de changer le mot clé directement dans l'URL, est-ce que ça saute ?

De cette façon, vous pouvez rechercher des images avec des mots-clés spécifiques via cette URL, donc en théorie, nous pouvons rechercher des images spécifiques sans ouvrir la page Web. La question suivante est de savoir comment mettre en œuvre le téléchargement automatique. En fait, grâce à nos connaissances antérieures, nous savons que nous pouvons utiliser une requête pour obtenir l'URL de l'image, puis l'explorer et l'enregistrer au format .jpg.

Ce projet devrait donc être réalisé.

Analyse de la page Web

D'accord, commençons par l'étape suivante, l'analyse du code source de la page Web. Ici, je reviens d'abord à la page traditionnelle. Pourquoi dois-je faire cela ? Parce que les images Baidu utilisent actuellement le mode de flux en cascade, ce qui est très difficile à traiter. L'interface de rotation de page traditionnelle est bien meilleure.

Voici un autre conseil : si vous pouvez crawler la version mobile, ne crawlez pas la version ordinateur, car le code de la version mobile est très clair et c'est facile pour obtenir le contenu requis.

D'accord, je suis revenu à la version traditionnelle, mais elle comporte toujours des numéros de page et est confortable à lire.

Faisons un clic droit et visualisons le code source

Qu'est-ce que c'est, comment pouvons-nous voir c'est clair ! !

En ce moment, il est temps d'utiliser F12, les outils de développement ! Revenons à la page précédente, appuyez sur F12 et la barre d'outils ci-dessous apparaîtra. Ce que nous devons utiliser, c'est l'élément dans le coin supérieur gauche. L'un est le suivi de la souris et l'autre change de version mobile, les deux étant disponibles. très utile pour nous. Nous utilisons le premier ici


然后选择你想看源代码的地方,就可以发现,下面的代码区自动定位到了这个位置,是不是很NB!

我们复制这个地址

然后到刚才的乱七八糟的源代码里搜索一下,发现它的位置了!(小样!我还找不到你!)但是这里我们又疑惑了,这个图片怎么有这么多地址,到底用哪个呢?我们可以看到有thumbURL,middleURL,hoverURL,objURL

通过分析可以知道,前面两个是缩小的版本,hover是鼠标移动过后显示的版本,objURL应该是我们需要的,不信可以打开这几个网址看看,发现obj那个最大最清晰。

好了,找到了图片位置,我们就开始分析它的代码。我看看是不是所有的objURL全是图片

貌似都是以.jpg格式结尾的,那应该跑不了了,我们可以看到搜索出61条,说明应该有61个图片

编写正则表达式

通过前面的学习,写出如下的一条正则表达式不难把?

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
Copier après la connexion

编写爬虫代码

好了,正式开始编写爬虫代码了。这里我们就用了2个包,一个是正则,一个是requests包,之前也介绍过了,没看的回去看!

#-*- coding:utf-8 -*-import reimport requests
Copier après la connexion

然后我们把刚才的网址粘过来,传入requests,然后把正则表达式写好

url = 'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1460997499750_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'



html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
Copier après la connexion

理论有很多图片,所以要循环,我们打印出结果来看看,然后用request获取网址,这里由于有些图片可能存在网址打不开的情况,加个5秒超时控制。

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
i = 0for each in pic_url:print eachtry:
        pic= requests.get(each, timeout=10)except requests.exceptions.ConnectionError:print '【错误】当前图片无法下载'continue
Copier après la connexion

好了,再就是把网址保存下来,我们在事先在当前目录建立一个picture目录,把图片都放进去,命名的时候,用数字命名把

    string = 'pictures\\'+str(i) + '.jpg'
    fp = open(string,'wb')
    fp.write(pic.content)
    fp.close()
    i += 1
Copier après la connexion

整个代码就是这样:

#-*- coding:utf-8 -*-
import re
import requests

url = 'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1460997499750_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)i = 0for each in pic_url:
    print each
    try:
        pic= requests.get(each, timeout=10)
    except requests.exceptions.ConnectionError:
        print '【错误】当前图片无法下载'
        continue
    string = 'pictures\\'+str(i) + '.jpg'
    fp = open(string,'wb')
    fp.write(pic.content)
    fp.close()i += 1
Copier après la connexion

我们运行一下,看效果(什么你说这是什么IDE感觉很炫!?赶紧去装Pycharm,Pycharm的配置和使用看这个文章!)!

好了我们下载了58个图片,咦刚才不是应该是61个吗?


我们看,运行中出现了有一些图片下载不了


我们还看到有图片没显示出来,打开网址看,发现确实没了。

所以,百度有些图片它缓存到了自己的机器上,所以你还能看见,但是实际连接已经失效

好了,现在自动下载问题解决了,那根据关键词搜索图片呢?只要改url就行了,我这里把代码写下来了

    word = raw_input("Input key word: ")
    url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+word+'&ct=201326592&v=flip'result = requests.get(url)
Copier après la connexion

好了,享受你第一个图片下载爬虫吧!!当然不只能下载百度的图片拉,依葫芦画瓢,你现在应该做很多事情了,比如爬取头像,爬淘宝展示图,或是...美女图片,捂脸。一切都凭客官你的想象了,当然,作为爬虫的第一个实例,虽然纯用request已经能解决很多问题了,但是效率还是不够高,如果想要高效爬取大量数据,还是用scrapy吧

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal