Scraping Web Python - Extraction de données
Analyser une page Web signifie comprendre sa structure. Maintenant, la question se pose de savoir pourquoi il est important pour le web scraping? Dans ce chapitre, comprenons cela en détail.
Analyse de pages Web
L'analyse de page Web est importante car sans analyse, nous ne sommes pas en mesure de savoir sous quelle forme nous allons recevoir les données (structurées ou non) de cette page Web après l'extraction. Nous pouvons analyser les pages Web des manières suivantes -
Affichage de la source de la page
C'est un moyen de comprendre comment une page Web est structurée en examinant son code source. Pour mettre en œuvre cela, nous devons faire un clic droit sur la page, puis sélectionner leView page sourceoption. Ensuite, nous obtiendrons les données qui nous intéressent à partir de cette page Web sous forme de HTML. Mais la principale préoccupation concerne les espaces et le formatage qui nous est difficile à formater.
Inspection de la source de la page en cliquant sur l'option Inspecter l'élément
C'est une autre façon d'analyser la page Web. Mais la différence est que cela résoudra le problème du formatage et des espaces dans le code source de la page Web. Vous pouvez l'implémenter en cliquant avec le bouton droit de la souris, puis en sélectionnant leInspect ou Inspect elementoption du menu. Il fournira des informations sur une zone ou un élément particulier de cette page Web.
Différentes façons d'extraire des données d'une page Web
Les méthodes suivantes sont principalement utilisées pour extraire des données d'une page Web -
Expression régulière
Il s'agit d'un langage de programmation hautement spécialisé intégré à Python. Nous pouvons l'utiliser à traversremodule de Python. Il est également appelé RE ou regexes ou modèles regex. À l'aide d'expressions régulières, nous pouvons spécifier certaines règles pour l'ensemble possible de chaînes que nous voulons faire correspondre à partir des données.
Si vous souhaitez en savoir plus sur les expressions régulières en général, accédez au lien et si vous voulez en savoir plus sur le module re ou l'expression régulière en Python, vous pouvez suivre le .
Exemple
Dans l'exemple suivant, nous allons extraire des données sur l'Inde de http://example.webscraping.com après avoir fait correspondre le contenu de <td> à l'aide d'une expression régulière.
import re
import urllib.request
response =
urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)
Production
La sortie correspondante sera comme indiqué ici -
[
'<img src="/places/static/images/flags/in.png" />',
'3,287,590 square kilometres',
'1,173,108,018',
'IN',
'India',
'New Delhi',
'<a href="/places/default/continent/AS">AS</a>',
'.in',
'INR',
'Rupee',
'91',
'######',
'^(\\d{6})$',
'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
'<div>
<a href="/places/default/iso/CN">CN </a>
<a href="/places/default/iso/NP">NP </a>
<a href="/places/default/iso/MM">MM </a>
<a href="/places/default/iso/BT">BT </a>
<a href="/places/default/iso/PK">PK </a>
<a href="/places/default/iso/BD">BD </a>
</div>'
]
Notez que dans la sortie ci-dessus, vous pouvez voir les détails sur le pays Inde en utilisant une expression régulière.
Belle soupe
Supposons que nous voulions collecter tous les hyperliens d'une page Web, nous pouvons alors utiliser un analyseur appelé BeautifulSoup qui peut être connu plus en détail à https://www.crummy.com/software/BeautifulSoup/bs4/doc/.En termes simples, BeautifulSoup est une bibliothèque Python permettant d'extraire des données de fichiers HTML et XML. Il peut être utilisé avec des requêtes, car il a besoin d'une entrée (document ou url) pour créer un objet soupe car il ne peut pas récupérer une page Web par lui-même. Vous pouvez utiliser le script Python suivant pour rassembler le titre de la page Web et des hyperliens.
Installer une belle soupe
En utilisant le pip commande, nous pouvons installer beautifulsoup soit dans notre environnement virtuel, soit en installation globale.
(base) D:\ProgramData>pip install bs4
Collecting bs4
Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
Running setup.py bdist_wheel for bs4 ... done
Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1
Exemple
Notez que dans cet exemple, nous étendons l'exemple ci-dessus implémenté avec le module Python de requêtes. nous utilisonsr.text pour créer un objet soupe qui sera ensuite utilisé pour récupérer des détails comme le titre de la page Web.
Tout d'abord, nous devons importer les modules Python nécessaires -
import requests
from bs4 import BeautifulSoup
Dans cette ligne de code suivante, nous utilisons des requêtes pour effectuer des requêtes HTTP GET pour l'url: https://authoraditiagarwal.com/ en effectuant une demande GET.
r = requests.get('https://authoraditiagarwal.com/')
Nous devons maintenant créer un objet Soup comme suit -
soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)
Production
La sortie correspondante sera comme indiqué ici -
<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal
Lxml
Une autre bibliothèque Python dont nous allons discuter pour le web scraping est lxml. Il s'agit d'une bibliothèque d'analyse HTML et XML haute performance. C'est relativement rapide et simple. Vous pouvez en savoir plus surhttps://lxml.de/.
Installation de lxml
En utilisant la commande pip, nous pouvons installer lxml soit dans notre environnement virtuel, soit en installation globale.
(base) D:\ProgramData>pip install lxml
Collecting lxml
Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5
Exemple: extraction de données à l'aide de lxml et de requêtes
Dans l'exemple suivant, nous récupérons un élément particulier de la page Web à partir de authoraditiagarwal.com en utilisant lxml et les requêtes -
Tout d'abord, nous devons importer les requêtes et le code HTML de la bibliothèque lxml comme suit -
import requests
from lxml import html
Nous devons maintenant fournir l'URL de la page Web à supprimer
url = 'https://authoraditiagarwal.com/leadershipmanagement/'
Maintenant, nous devons fournir le chemin (Xpath) à un élément particulier de cette page Web -
path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content())
Production
La sortie correspondante sera comme indiqué ici -
The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical
axis represents the hours remaining to complete the committed work.