Comment créer un robot d'exploration Web de base pour extraire des informations d'un site Web

Comment créer un robot d'exploration Web de base pour extraire des informations d'un site Web

Les programmes qui lisent des informations à partir de sites Web ou de robots d'exploration Web ont toutes sortes d'applications utiles. Vous pouvez rechercher des informations sur les actions, les résultats sportifs, le texte d'un compte Twitter ou extraire les prix des sites Web d'achat.



L'écriture de ces programmes d'exploration Web est plus facile que vous ne le pensez. Python possède une excellente bibliothèque pour écrire des scripts qui extraient des informations de sites Web. Voyons comment créer un robot d'exploration Web à l'aide de Scrapy.

Installation de Scrapy

grattant est une bibliothèque Python qui a été créée pour gratter le Web et créer des robots d'exploration Web. Il est rapide, simple et peut parcourir plusieurs pages Web sans trop d'effort.





Scrapy est disponible via la bibliothèque Pip Installs Python (PIP), voici un rappel sur comment installer PIP sur Windows, Mac et Linux .

L'utilisation d'un environnement virtuel Python est préférable car elle vous permettra d'installer Scrapy dans un répertoire virtuel qui laisse vos fichiers système seuls. La documentation de Scrapy recommande de le faire pour obtenir les meilleurs résultats.



Créez un répertoire et initialisez un environnement virtuel.

comment ajouter des jeux nes à snes classic
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Vous pouvez maintenant installer Scrapy dans ce répertoire à l'aide d'une commande PIP.

pip install scrapy

Une vérification rapide pour s'assurer que Scrapy est correctement installé

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Comment créer un robot d'exploration Web

Maintenant que l'environnement est prêt, vous pouvez commencer à créer le robot d'exploration Web. Extrayons quelques informations d'une page Wikipedia sur les batteries : https://en.wikipedia.org/wiki/Batterie_(électricité) .

La première étape pour écrire un crawler consiste à définir une classe Python qui s'étend de Scrapy.Spider . Cela vous donne accès à toutes les fonctions et fonctionnalités de Scrapy. Appelons cette classe araignée1 .

Une classe d'araignée a besoin de quelques informations :

  • à Nom pour identifier l'araignée
  • à start_urls variable contenant une liste d'URL à partir de laquelle explorer (l'URL Wikipedia sera l'exemple dans ce tutoriel)
  • à analyser () méthode utilisée pour traiter la page Web afin d'extraire des informations
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Un test rapide pour s'assurer que tout fonctionne correctement.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Désactiver la journalisation

L'exécution de Scrapy avec cette classe imprime des informations de journal qui ne vous aideront pas pour le moment. Faisons simple en supprimant ces informations de journal en excès. Utiliser un Attention instruction en ajoutant du code au début du fichier.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Désormais, lorsque vous exécutez à nouveau le script, les informations du journal ne s'imprimeront pas.

Utilisation de l'inspecteur Chrome

Tout sur une page Web est stocké dans des éléments HTML. Les éléments sont organisés dans le Document Object Model (DOM). Comprendre le DOM est essentiel pour tirer le meilleur parti de votre robot d'exploration Web. Un robot d'exploration Web effectue une recherche dans tous les éléments HTML d'une page pour trouver des informations. Il est donc important de savoir comment ils sont organisés.

Google Chrome dispose d'outils qui vous aident à trouver des éléments HTML plus rapidement. Vous pouvez localiser le code HTML de tout élément que vous voyez sur la page Web à l'aide de l'inspecteur.

  • Accédez à une page dans Chrome
  • Placez la souris sur l'élément que vous souhaitez visualiser
  • Faites un clic droit et sélectionnez Inspecter du menu

Ces étapes ouvriront la console développeur avec le Éléments onglet sélectionné. Au bas de la console, vous verrez un arbre d'éléments. Cet arbre est la façon dont vous obtiendrez des informations pour votre script.

Extraire le titre

Laissons le script travailler pour nous ; Une simple exploration pour obtenir le texte du titre de la page Web.

Démarrez le script en ajoutant du code au analyser () méthode qui extrait le titre.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

Les réponse L'argument prend en charge une méthode appelée CSS() qui sélectionne des éléments de la page en utilisant l'emplacement que vous fournissez.

Dans cet exemple, l'élément est h1.premierEntête . Ajouter

::text

au script est ce qui vous donne le contenu textuel de l'élément. Finalement, le extrait() La méthode renvoie l'élément sélectionné.

L'exécution de ce script dans Scrapy imprime le titre sous forme de texte.

[u'Battery (electricity)']

Trouver la description

Maintenant que nous avons gratté le texte du titre, faisons plus avec le script. Le robot va trouver le premier paragraphe après le titre et extraire cette information.

Voici l'arborescence des éléments dans la console développeur Chrome :

ebooks gratuits à télécharger et à lire
div#mw-content-text>div>p

La flèche droite (>) indique une relation parent-enfant entre les éléments.

Cet emplacement renverra tous les p éléments appariés, qui comprend la description complète. Pour obtenir le premier p élément, vous pouvez écrire ce code :

response.css('div#mw-content-text>div>p')[0]

Tout comme le titre, vous ajoutez un extracteur CSS

::text

pour obtenir le contenu textuel de l'élément.

response.css('div#mw-content-text>div>p')[0].css('::text')

L'expression finale utilise extrait() pour retourner la liste. Vous pouvez utiliser le Python rejoindre() fonction pour rejoindre la liste une fois que tout le crawl est terminé.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Le résultat est le premier paragraphe du texte !

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Collecte de données JSON

Scrapy peut extraire des informations sous forme de texte, ce qui est utile. Scrapy vous permet également d'afficher les données JavaScript Object Notation (JSON). JSON est un moyen efficace d'organiser les informations et est largement utilisé dans le développement Web. JSON fonctionne plutôt bien avec Python également.

Lorsque vous devez collecter des données au format JSON, vous pouvez utiliser le rendement déclaration intégrée à Scrapy.

Voici une nouvelle version du script utilisant une déclaration de rendement. Au lieu d'obtenir le premier élément p au format texte, cela récupérera tous les éléments p et les organisera au format JSON.

Comment afficher l'icône Bluetooth dans la barre des tâches Windows 10
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Vous pouvez maintenant exécuter l'araignée en spécifiant un fichier JSON de sortie :

scrapy runspider spider3.py -o joe.json

Le script va maintenant imprimer tous les éléments p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Racler plusieurs éléments

Jusqu'à présent, le robot d'exploration Web a gratté le titre et un type d'élément de la page. Scrapy peut également extraire des informations de différents types d'éléments dans un script.

Extrayons les meilleurs succès IMDb Box Office pour un week-end. Ces informations sont extraites de http://www.imdb.com/chart/boxoffice , dans un tableau avec des lignes pour chaque métrique.

Les analyser () La méthode peut extraire plusieurs champs de la ligne. À l'aide des outils de développement Chrome, vous pouvez trouver les éléments imbriqués dans le tableau.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

Les image le sélecteur spécifie que img est un descendant de td.posterColonne . Pour extraire le bon attribut, utilisez l'expression |_+_|.

L'exécution de l'araignée renvoie JSON :

::attr(src)

Plus de grattoirs Web et de bots

Scrapy est une bibliothèque détaillée qui peut effectuer à peu près n'importe quel type d'exploration Web que vous lui demandez. Quand il s'agit de trouver des informations dans des éléments HTML, combinés à la prise en charge de Python, c'est difficile à battre. Que vous construisiez un robot d'exploration Web ou que vous appreniez les bases du grattage Web, la seule limite est ce que vous êtes prêt à apprendre.

Si vous cherchez d'autres moyens de créer des robots ou des robots, vous pouvez essayer de créer des bots Twitter et Instagram à l'aide de Python . Python peut créer des choses étonnantes dans le développement Web, il vaut donc la peine d'aller au-delà des robots d'exploration Web lors de l'exploration de ce langage.

Partager Partager Tweeter E-mail 15 commandes d'invite de commande Windows (CMD) que vous devez connaître

L'invite de commande est toujours un outil Windows puissant. Voici les commandes CMD les plus utiles que tout utilisateur Windows doit connaître.

Lire la suite
Rubriques connexes
  • La programmation
  • Outils pour les webmasters
  • La programmation
  • Python
  • Tutoriels de codage
  • Robots d'exploration Web
A propos de l'auteur Antoine Grant(40 articles publiés)

Anthony Grant est un écrivain indépendant couvrant la programmation et les logiciels. C'est un étudiant en informatique spécialisé dans la programmation, Excel, les logiciels et la technologie.

Plus de Anthony Grant

Abonnez-vous à notre newsletter

Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !

Cliquez ici pour vous abonner