Écrivez un "bot" de scraping web sans tête de base en Python avec Beautiful Soup 4

Dans cet article, nous allons utiliser Beautiful Soup 4 pour créer un "bot" de base de scraping web sans tête en Python sur Alibaba Cloud Elastic Compute Service (ECS) avec CentOS 7.

Configurer une instance CentOS dans le cloud Alibaba

Dans Ce didacticiel Vous devez être habitué à lancer une instance Alibaba Cloud exécutant CentOS. Si vous ne savez pas comment configurer une instance ECS, consultez ce didacticiel. Si vous avez déjà acheté, [ce tutoriel](https://www.alibabacloud.com/blog/how-to-set-up-your-first-centos-7-server-on-alibaba-cloud_593743?spm Vérifiez = a2c65.11461447.0.0.45066ff90S594T) et configurez le serveur en conséquence.

J'ai déployé une instance de CentOS pour cette leçon. Il vaut mieux ne pas être gonflé pour ce projet. Ce projet n'utilise pas de GUI (Graphical User Interface), il est donc recommandé d'avoir des connaissances de base en ligne de commande de terminal.

Installez Python 3, PIP3, Nano à partir de la ligne de commande du terminal

C'est toujours une bonne idée de mettre à jour l'ensemble d'une instance particulière. Tout d'abord, mettez à jour tous les packages vers la dernière version.

sudo yum update

Je prévois d'utiliser Python pour le "bot" de base du scraping Web. Je suis également impressionné par la simplicité relative du langage et la variété des modules. En particulier, utilisez les modules Requests et Beautiful Soup 4.

Normalement, Python3 est installé par défaut, mais sinon, installez Python3 et Pip. Tout d'abord, installez IUS (abréviation de Inline with Upstream Stable). IUS est un projet communautaire qui fournit des packages Red Hat Package Manager (RPM). Ensuite, installez python36u et pip.

sudo yum install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install python36u
sudo yum install python36u-pip

Pip est un système de gestion de packages permettant d'installer et de gérer des packages logiciels tels que ceux trouvés dans l'index des packages Python. Pip est une alternative à easy_install.

Veuillez noter que l'installation de pip est pour Python 2.7 et que python36u-pip est pour Python 3 car j'ai eu des difficultés à installer pip au lieu de python36u-pip dans le passé.

Nano est un éditeur de texte de base et est très pratique pour de telles applications. Maintenant, installons Nano.

sudo yum install nano

Installer des packages Python à l'aide de Pip

Ensuite, vous devez installer les packages Python que vous utilisez aujourd'hui, Requests et Beautiful Soup 4.

Ceux-ci sont installés via PIP.

pip36u install requests
pip36u install beautifulsoup4

Requests est un module Python qui vous permet de naviguer vers des pages Web à l'aide de la méthode Requests .get.

Requests vous permet d'envoyer des requêtes HTTP / 1.1 par programmation à l'aide de scripts Python. Il n'est pas nécessaire d'ajouter manuellement des chaînes de requête à l'URL ou d'encoder les données POST. Le maintien en vie et le regroupement de connexions HTTP sont 100% automatiques. Aujourd'hui, nous obtiendrons la source de la page Web centrée sur la méthode Requests .get.

Beautiful Soup est une bibliothèque Python permettant de récupérer des données à partir de fichiers HTML et XML. Vous pouvez facilement naviguer, rechercher, modifier l'arborescence d'analyse, etc. en établissant un lien avec votre analyseur préféré.

Utilisez Beautiful Soup 4 avec le html.parer standard de Python pour analyser et organiser les données des sources de page Web récupérées par Requests. Dans ce tutoriel, nous utilisons la méthode de la belle soupe "prettify" pour organiser nos données d'une manière plus lisible par l'homme.

Créez un dossier appelé Python_apps. Puis changez le répertoire de travail actuel en Python_apps.

mkdir Python_apps
cd Python_apps

Ecrire un robot de scraping sans tête en Python

Eh bien, j'ai enfin hâte d'y être. Vous pouvez écrire des robots de raclage sans tête Python. Nous allons à l'URL et utilisons la requête pour obtenir la source de la page. Utilisez ensuite Beautiful Soup 4 pour analyser la source HTML et la rendre semi-lisible. Après cela, enregistrez les données analysées dans un fichier local sur l'instance. Maintenant, mettons-nous au travail.

Utilisez Requests pour obtenir la source de la page et BeautifulSoup4 pour mettre en forme les données dans un état lisible. Utilisez ensuite les méthodes Python open () et write () pour enregistrer les données de la page sur votre disque dur local. Allons-y.

Ouvrez Nano ou votre éditeur de texte préféré dans le terminal et créez un nouveau fichier nommé "bot.py". Je trouve le Nano parfaitement adapté aux fonctionnalités d'édition de texte de base.

Tout d'abord, ajoutez l'importation.

############################################################ IMPORTS
import requests
from bs4 import BeautifulSoup

Le code ci-dessous définit certaines variables globales.

1, entrée URL utilisateur 2. Méthode Requests.get pour obtenir l'URL saisie 3. Méthode Requests.text pour enregistrer des données texte dans des variables

####### REQUESTS TO GET PAGE : BS4 TO PARSE DATA
#GLOBAL VARS
####### URL FOR SITE TO SCRAPE
url = input("WHAT URL WOULD YOU LIKE TO SCRAPE? ")
####### REQUEST GET METHOD for URL
r = requests.get("http://" + url)
####### DATA FROM REQUESTS.GET
data = r.text

Maintenant, convertissons la variable globale "data" en un objet BS4 et formatez-le avec la méthode BS4 prettify.

####### MAKE DATA VAR BS4 OBJECT
source = BeautifulSoup(data, "html.parser")
####### USE BS4 PRETTIFY METHOD ON SOURCE VAR NEW VAR PRETTY_SOURCE
pretty_source = source.prettify()

Sortons ces variables dans le terminal ainsi que dans le fichier local. Cela montre quelles données seront écrites dans le fichier local avant d'être réellement écrites dans le fichier local.

print(source)

Obtenez d'abord la source dans un gros morceau de texte. C'est très difficile à déchiffrer pour les humains, nous allons donc nous fier à Beautiful Soup pour aider au formatage. Appelons donc la méthode Prettify pour mieux organiser nos données. Cela rend la lecture beaucoup plus facile pour les humains. Puis sortez la source après la méthode BS4 prettify ().

print(pretty_source)

Après avoir exécuté le code, votre appareil devrait maintenant afficher le format prédéfini de la source HTML pour la page que vous avez saisie.

Maintenant, sauvegardons ce fichier sur un disque dur local sur l'instance Alibaba Cloud ECS. Pour ce faire, vous devez d'abord ouvrir le fichier en mode écriture.

Pour ce faire, passez la chaîne «w» comme deuxième argument de la méthode open ().

####### OPEN SOURCE IN WRITE MODE WITH "W" TO VAR LOCAL_FILE
####### MAKE A NEW FILE
local_file = open(url.strip("https://" + "http://") + "_scrapped.txt" , "w")
####### WRITE THE VAR PRETTY_SOUP TO FILE
local_file.write(pretty_source)
### GET RID OF ENCODING ISSUES ##########################################
#local_file.write(pretty_source.encode('utf-8'))
####### CLOSE FILE
local_file.close()

Dans le bloc de code ci-dessus, un fichier avec le nom concaténé avec "_scrapped.txt" est créé dans l'URL saisie précédemment et une variable à ouvrir est créée. Le premier argument de la méthode open est le nom de fichier sur le disque local. "HTTPS: //" et "HTTP: //" ont été supprimés du nom de fichier. Si vous ne le supprimez pas, le nom du fichier sera invalide. Le deuxième argument est l'autorisation d'écriture dans ce cas.

Passez ensuite la variable "pretty_source" comme argument à la méthode .write et écrivez dans la variable "local_file". Utilisez des lignes commentées si vous devez encoder le texte en UTF-8 pour l'imprimer correctement dans un fichier local. Fermez ensuite le fichier texte local.

Exécutons le code et voyons ce qui se passe.

python3.6  bot.py

Il vous sera demandé de saisir l'URL que vous souhaitez supprimer. Essayons https://www.wikipedia.org. Le code source correctement formaté d'un site Web particulier est maintenant enregistré sous forme de fichier .txt dans votre répertoire de travail local.

Le code final de ce projet ressemble à ceci:

print("*" * 30 )
print("""
# 
# SCRIPT TO SCRAPE AND PARSE DATA FROM
# A USER INPUTTED URL. THEN SAVE THE PARSED
# DATA TO THE LOCAL HARD DRIVE.
""")
print("*" * 30 )

############################################################ IMPORTS
import requests
from bs4 import BeautifulSoup

####### REQUESTS TO GET PAGE : BS4 TO PARSE DATA
#GLOBAL VARS
####### URL FOR SITE TO SCRAPE
url = input("ENTER URL TO SCRAPE")

####### REQUEST GET METHOD for URL
r = requests.get(url)

####### DATA FROM REQUESTS.GET
data = r.text

####### MAKE DATA VAR BS4 OBJECT 
source = BeautifulSoup(data, "html.parser")


####### USE BS4 PRETTIFY METHOD ON SOURCE VAR NEW VAR PRETTY_SOURCE
pretty_source = source.prettify()

print(source)

print(pretty_source)

####### OPEN SOURCE IN WRITE MODE WITH "W" TO VAR LOCAL_FILE
####### MAKE A NEW FILE
local_file = open(url.strip("https://" + "http://") + "_scrapped.txt" , "w")
####### WRITE THE VAR PRETTY_SOUP TO FILE
local_file.write(pretty_source)
#local_file.write(pretty_source.decode('utf-8','ignore'))
#local_file.write(pretty_source.encode('utf-8')
####### CLOSE FILE
local_file.close()

Aperçu

Vous avez appris à utiliser Beautiful Soup 4 pour créer un "bot" de scraping web headless de base en Python sur une instance Alibaba Cloud Elastic Compute Service (ECS) avec CentOS 7. J'ai utilisé Requests pour obtenir le code source d'une page Web particulière, utilisé Beautiful soup 4 pour analyser les données et finalement enregistré le code source de la page Web récupérée dans un fichier texte local sur l'instance. Vous pouvez utiliser le module Beautiful soup 4 pour mettre en forme le texte pour une lisibilité humaine.

Recommended Posts

Écrivez un "bot" de scraping web sans tête de base en Python avec Beautiful Soup 4
Essayez de gratter avec Python + Beautiful Soup
Scraping avec Selenium en Python (Basic)
Gratter avec une belle soupe en 10 minutes
[Python] Gratter une table avec Beautiful Soup
Gratter avec une belle soupe
[Python] Supprimer en spécifiant une balise avec Beautiful Soup
Web scraping avec python + JupyterLab
Grattage au sélénium en Python
Grattage avec chromedriver en python
Grattage avec du sélénium en Python
Web scraping débutant avec python
Grattage de table avec belle soupe
Gratter les résultats de recherche de Google Actualités en Python (2) Utiliser Beautiful Soup
Ecrire une dichotomie en Python
Racler plusieurs pages avec Beautiful Soup
[Python] Un mémorandum de belle soupe4
Ecrire des algorithmes A * (A-star) en Python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Grattage de site Web avec Beautiful Soup en Python
Ecrire un script batch avec Python3.5 ~
Obtenez l'URL de destination du lien en spécifiant la phrase de texte avec le grattage Python (Beautiful Soup) + XPath
Écrire de la documentation dans Sphinx avec Python Livereload
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Grattage WEB avec Python (pour mémo personnel)
Ecrire le test dans la docstring python
Premiers pas avec Python Web Scraping Practice
Ecrire une courte définition de propriété en Python
Démonisez une application Web Python avec Supervisor
[Note personnelle] Scraping de pages Web en python3
Site de courses de chevaux Web scraping avec Python
[Python] Une application web rapide avec Bottle!
Scraping de sites Web à l'aide de JavaScript en Python
Premiers pas avec Python Web Scraping Practice
Ecrire une méthode de cupidité simple en Python
Ecrire un client TCP avec Python Twisted
Essayez le scraping HTML avec la bibliothèque Python
Ecrire un plugin Vim simple en Python 3
Exécutez une application Web Python avec Docker
Créez un framework Web avec Python! (1)
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
[Pour les débutants] Essayez le web scraping avec Python
Jetons JavaScript et écrivons un front-end Web en Python!
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Grattage avec Python
[Python] Récupérez les fichiers dans le dossier avec Python
Créer un bot Twitter Trend avec heroku + Python
Grattage avec Python
Créer un LINE BOT avec Minette pour Python
Créer un environnement virtuel avec conda avec Python
Démarrez un serveur Web Python simple avec Docker
Étapes pour développer une application Web en Python