Python >> Tutoriel Python >  >> Python

Web Scraping avec les bibliothèques Python

Voici quelques bibliothèques Python utiles pour vous lancer dans le scraping Web.

Vous recherchez des grattoirs de sites Web Python ? Dans cet article, nous vous présenterons quelques bibliothèques utiles pour le scraping Web Python. Vous trouverez les outils et l'inspiration pour lancer votre prochain projet de scraping Web.

Le scraping Web est le processus d'extraction d'informations à partir du code source d'une page Web. Il peut s'agir de texte, de données numériques ou même d'images. C'est la première étape de nombreux projets intéressants! Cependant, il n'existe pas de technologie ou de méthodologie fixe pour le grattage Web Python. La meilleure approche est très dépendante du cas d'utilisation.

Cet article s'adresse aux personnes ayant un peu plus d'expérience en Python et en analyse de données. Si vous débutez avec Python et avez besoin de matériel d'apprentissage, jetez un œil à cette piste pour vous donner une formation en analyse de données.

Commençons !

Demandes

La première étape du processus consiste à obtenir des données de la page Web que nous voulons récupérer. La bibliothèque de requêtes est utilisée pour effectuer des requêtes HTTP vers une URL.

Par exemple, supposons que nous souhaitions obtenir un article du blog learnpython.com. Pour importer la bibliothèque et obtenir la page, il suffit de quelques lignes de code :

>>> import requests
>>> url = 'https://learnpython.com/blog/python-match-case-statement/'
>>> r = requests.get(url)

L'objet r est la réponse du serveur hôte et contient les résultats de la requête get(). Pour voir si la demande a réussi, vérifiez l'état avec r.status_code. Espérons que nous ne voyons pas le redoutable 404 ! Il est possible de personnaliser la requête get() avec quelques arguments optionnels pour modifier la réponse du serveur. Pour plus d'informations sur cette bibliothèque, y compris comment envoyer une demande personnalisée, consultez la documentation et le guide de l'utilisateur.

Pour obtenir le contenu de la page Web, nous devons simplement faire ce qui suit :

>>> page_text = r.text

Cela renvoie le contenu de la page entière sous forme de chaîne. À partir de là, nous pouvons essayer d'extraire manuellement les informations requises, mais cela est compliqué et sujet aux erreurs. Heureusement, il existe un moyen plus simple.

Belle soupe

Beautiful Soup est une bibliothèque conviviale avec des fonctionnalités pour analyser automatiquement les documents HTML et XML dans une structure arborescente. Cette bibliothèque analyse uniquement les données, c'est pourquoi nous avons besoin d'une autre bibliothèque pour obtenir les données comme nous l'avons vu dans la section précédente.

La bibliothèque fournit également des fonctions de navigation, de recherche et de modification des données analysées. Essayer différentes stratégies d'analyse est très simple et nous n'avons pas à nous soucier des encodages de documents.

Nous pouvons utiliser cette bibliothèque pour analyser la chaîne au format HTML à partir des données que nous avons récupérées et extraire les informations souhaitées. Importons la bibliothèque et commençons à faire de la soupe :

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(page_text, 'html.parser')

Nous avons maintenant un BeautifulSoup objet, qui représente la chaîne sous la forme d'une structure de données imbriquée. La marche à suivre à partir d'ici dépend des informations que nous voulons extraire de la page. Cela peut être le texte, les extraits de code, les titres ou n'importe quoi d'autre.

Pour avoir une idée de la façon dont les informations sont représentées, ouvrez l'URL dans votre navigateur préféré et jetez un coup d'œil au code source derrière la page Web. Cela ressemble à ceci :

Disons que nous voulons récupérer les extraits de code Python du code source HTML. Notez qu'ils apparaissent toujours entre <pre class="brush: python; title: ; notranslate"> et </pre> . Nous pouvons l'utiliser pour extraire le code Python de la soupe comme suit :

>>> string = soup.find(class_ = "brush: python; title: ; notranslate").text

Ici, nous utilisons le find() méthode, qui extrait uniquement la première correspondance. Si vous voulez trouver toutes les correspondances, utilisez find_all() pour renvoyer une structure de données de type liste qui peut être indexée normalement.

Maintenant, nous avons l'extrait de code sous forme de chaîne comprenant des caractères de nouvelle ligne et des espaces pour indenter le code. Pour exécuter ce code, nous devons le nettoyer un peu pour supprimer les caractères indésirables et l'enregistrer dans un fichier .py. Par exemple, nous pouvons utiliser string.replace('>', '') pour supprimer le > caractères.

Consultez cet article, qui contient un exemple qui peut être utile à ce stade. L'écriture d'un programme pour télécharger et exécuter d'autres programmes a une belle sensation récursive. Cependant, méfiez-vous du téléchargement de code potentiellement malveillant.

Sélénium

Selenium a été développé principalement comme un cadre pour l'automatisation et les tests de navigateur. Cependant, la bibliothèque a trouvé une autre utilisation en tant que boîte à outils pour le grattage Web avec Python, ce qui la rend assez polyvalente. Par exemple, il est utile si nous devons interagir avec un site Web en remplissant un formulaire ou en cliquant sur un bouton. Le sélénium peut également être utilisé pour extraire des informations du JavaScript utilisé par de nombreux sites pour charger le contenu de manière dynamique.

Utilisons Selenium pour ouvrir un navigateur, accéder à une page Web, saisir du texte dans un champ et récupérer des informations. Cependant, avant de faire tout cela, nous devons télécharger un fichier exécutable supplémentaire pour piloter le navigateur. Dans cet exemple, nous travaillerons avec le navigateur Chrome, mais il existe d'autres options. Vous pouvez trouver les pilotes pour votre version de Chrome ici. Téléchargez le bon pilote et enregistrez-le dans directory .

Pour ouvrir le navigateur avec Selenium en Python, procédez comme suit :

>>> from selenium import webdriver
>>> driver = webdriver.Chrome(directory+'chromedriver.exe')
>>> driver.get('https://learnpython.com/')
>>> driver.maximize_window()

Cela ouvre une fenêtre de navigateur, navigue jusqu'à https://learnpython.com et maximise la fenêtre. L'étape suivante consiste à trouver et à cliquer sur le bouton "Cours":

>>> courses_button = driver.find_element_by_link_text('Courses')
>>> courses_button.click()
>>> driver.refresh()

Le navigateur accède à la page Cours. Trouvons le champ de recherche et saisissons un terme de recherche :

>>> search_field = driver.find_element_by_class_name('TextFilterComponent__search-bar')
>>> search_field.clear()
>>> search_field.send_keys('excel')

Les résultats sont automatiquement mis à jour. Ensuite, nous voulons trouver le premier résultat et imprimer le nom du cours :

>>> result = driver.find_element_by_class_name('CourseBlock')
>>> innerhtml = result.get_attribute('innerHTML')
>>> more_soup = BeautifulSoup(innerhtml, 'html.parser')
>>> title = more_soup.find(class_ = 'CourseBlock__name').text

Nous utilisons BeautifulSoup pour analyser le code HTML du premier résultat de recherche, puis renvoyer le nom du cours sous forme de chaîne. Si nous voulons exécuter ce code en un seul bloc, il peut être nécessaire de laisser le programme dormir quelques secondes pour que la page se charge correctement. Essayez ce flux de travail avec un terme de recherche différent, par exemple, "chaînes" ou "science des données".

Pour faire tout cela pour votre propre projet, vous devez inspecter le code source de la page Web pour trouver les noms ou identifiants pertinents des éléments avec lesquels vous souhaitez interagir. Cela dépend toujours du cas d'utilisation et implique un peu de travail d'investigation.

Scrapy

Contrairement aux deux bibliothèques précédentes, scrapy est très rapide et efficace. Cela le rend utile pour récupérer de grandes quantités de données sur le Web - un gros avantage de cette bibliothèque. Il prend également en charge le grattage et l'analyse des données.

Cependant, ce n'est pas la bibliothèque la plus conviviale jamais écrite. Il est difficile de s'y retrouver. Il est également difficile de montrer un exemple simple ici.

Le flux de travail pour l'utilisation de scrapy consiste à créer un projet dédié dans un répertoire séparé, où plusieurs fichiers et répertoires sont automatiquement créés. Vous voudrez peut-être consulter le cours sur LearnPython.com qui vous apprend à travailler efficacement avec des fichiers et des répertoires.

Un des répertoires créés est le répertoire "spiders/" dans lequel vous mettez vos spiders. Les araignées sont des classes qui héritent du scrapy.Spider classer. Ils définissent les demandes à effectuer, comment suivre les liens sur la page Web et comment analyser le contenu. Une fois que vous avez défini votre araignée pour explorer une page Web et en extraire le contenu, vous pouvez exécuter votre script à partir du terminal. Consultez cet article pour en savoir plus sur l'utilisation de Python et de l'interface de ligne de commande.

Une autre fonctionnalité puissante de scrapy est la connexion automatisée. Pour certains sites, nous ne pouvons accéder aux données qu'après une connexion réussie, mais nous pouvons automatiser cela avec scrapy.FormRequest .

Lisez la page de documentation scrapy pour plus d'informations. Vous y trouverez le guide d'installation et un exemple de cette bibliothèque en action.

Où aller d'ici dans le Web Scraping ?

Nous avons vu les bases du web scraping avec Python et discuté de certaines bibliothèques populaires. Le web scraping a un grand nombre d'applications. Vous voudrez peut-être extraire du texte de Wikipédia pour l'utiliser pour le traitement du langage naturel. Vous voudrez peut-être obtenir automatiquement les prévisions météorologiques pour votre ville natale. Vous pouvez même écrire un programme pour comparer les prix des vols ou des hôtels avant vos prochaines vacances.

L'utilisation de Python pour les projets de science des données présente de nombreux avantages. C'est généralement une bonne idée de commencer avec un petit projet et de développer lentement vos compétences. Si vous développez des projets plus complexes avec plusieurs bibliothèques, suivez-les avec un fichier requirements.txt. Avant de vous en rendre compte, vous aurez maîtrisé une autre compétence lors de votre parcours Python !