Vous êtes désormais prêt à utiliser PycURL et BeautifulSoup. Pour utiliser ces paquets, nous devons d'abord les importer dans notre fichier `scraper.py`. Ajoutez simplement cet extrait de code en haut du fichier :
import pycurl
import certify
from io import BytesIO
from bs4 import BeautifulSoup
# All our logic will go underneath this line
Maintenant que vous avez importé les paquets, occupons-nous de la logique de notre scraper Web. D'après ce que nous avons vu jusqu'à présent, nous savons que nous devons aborder deux aspects : l'extraction des données et le traitement des données. La première partie est gérée par PycURL et la seconde par BeautifulSoup. Pour une meilleure structure, je suggère de traiter chaque partie séparément.
3.1. Récupération de données avec cURL et Python
Quand je parle de scraping, je fais référence à la partie extraction du scraper web. En gardant cela à l'esprit et en sachant comment utiliser curl en Python via l'interface PycURL, écrivons le code :
# Setting global variables
TARGET_URL = 'https://httpbin.org/forms/post'
# Using cURL and Python to gather data from a server via PycURL
buffer = BytesIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, TARGET_URL)
curl.setopt(curl.WRITEDATA, buffer)
curl.setopt(curl.CAINFO, certifi.where())
curl.perform()
curl.close()
# Using BytesIO to retrieve the scraped data
body = buffer.getvalue()
# Saving the output and printing it in terminal
data = body.decode('iso-8859-1')
print(data)
Dans le code ci-dessus, nous commençons par déclarer la variable globale `TARGET_URL` qui contient l'URL du site web dont nous voulons extraire les données. Ensuite, nous créons un tampon à l'aide de `BufferIO`, nous initialisons PycURL et définissons deux options : l'une pour le transfert de données, l'autre pour le nom du fichier contenant les certificats. Enfin, nous exécutons l'action curl et fermons la session par la suite.
Et voilà, vous avez réussi à utiliser Python pour effectuer une requête cURL et afficher le fichier HTML dans votre console. Il ne nous reste plus qu’à nous occuper de la deuxième partie, à savoir le traitement des données.
3.2. Analyse du code HTML avec Python et BeautifulSoup
Disposer des données brutes est superflu en web scraping, à moins d’effectuer une action quelconque sur celles-ci. L’objectif le plus fondamental de tout web scraper est d’extraire des données du code HTML. Pour notre exemple, supposons que nous souhaitions extraire tout le texte contenu dans les éléments `<p>` de la variable `data` (qui contient actuellement tout le code HTML extrait). Voici comment procéder à l’aide de BeautifulSoup :
# Parsing data using BeautifoulSoup
soup = BeautifulSoup(data, 'html.parser')
# Finding elements using BeautifoulSoup
paragraphs = soup.find_all("p")
for p in paragraphs:
print(p.text)
Comme vous pouvez le voir, avec BeautifulSoup, il suffit de 4 lignes de code pour obtenir le résultat souhaité. L'exécution du script complet devrait maintenant afficher le texte contenu dans chaque paragraphe du fichier HTML que nous avons récupéré sur le site web ciblé.
Donc, en supposant que vous ayez suivi les instructions et que votre fichier `scraper.py` contienne tout le code que nous avons écrit dans cette section, retournons au terminal et exécutons le script :
~/desktop/py_scraper » python3 scraper.py
Customer name:
Telephone:
E-mail address:
Small
Medium
Large
Bacon
Extra Cheese
Onion
Mushroom
Preferred delivery time:
Delivery instructions:
Submit order