grattant

Scrapy Web avec le module Python Scrapy

Scrapy Web avec le module Python Scrapy
La compétence du grattage Web est devenue dorée aujourd'hui, alors apprenons comment nous pouvons obtenir les données nécessaires à partir de pages Web. Dans cet article, nous parlerions de la bibliothèque Scrapy Python, de ce qu'elle peut faire et comment l'utiliser. Commençons.

Pourquoi Scrap?

Scrapy est une bibliothèque de grattage Web robuste, qui offre la possibilité de télécharger des pages Web, des images et toutes les données auxquelles vous pourriez penser à une vitesse fulgurante. La vitesse est d'une grande importance dans le calcul, et Scrapy y travaille en visitant des sites Web de manière asynchrone et en effectuant beaucoup de travail en arrière-plan, ce qui rend la tâche plus facile.

Il faut dire que Python a d'autres bibliothèques qui peuvent être utilisées pour extraire les données des sites Web, mais aucune n'est comparable à Scrapy en termes d'efficacité.

Installation

Regardons rapidement comment cette puissante bibliothèque peut être installée sur votre machine.

Comme pour la majorité des bibliothèques Python, vous pouvez installer Scrapy à l'aide du module pip :

pip installer Scrapy

Vous pouvez vérifier si l'installation a réussi en important scrapy dans le shell interactif de Python.

$ python
Python 3.5.2 (par défaut, 14 sept. 2017, 22:51:06)
[CCG 5.4.0 20160609] sur Linux

Tapez "aide", "droit d'auteur", "crédits" ou "licence" pour plus d'informations.

>>> importer scrapy

Maintenant que nous avons terminé l'installation, entrons dans le vif du sujet.

Création d'un projet de grattage Web

Lors de l'installation, le mot-clé scrapy a été ajouté au chemin afin que nous puissions utiliser le mot-clé directement à partir de la ligne de commande. Nous en profiterions tout au long de notre utilisation de la bibliothèque.

Depuis le répertoire de votre choix exécutez la commande suivante :

scrapy startproject webscraper

Cela créerait un répertoire appelé grattoir dans le répertoire courant et scrapy.fichier cfg. Dans le grattoir  répertoire aurait __init__.py, articles.py, middlewares.py, canalisations.py, paramètres.py fichiers et un répertoire appelé araignées.

Nos fichiers spider je.e. le script qui fait le webscraping pour nous serait stocké dans le araignées annuaire.

Écrire notre araignée

Avant de commencer à écrire notre araignée, il est prévu que nous sachions déjà quel site Web nous voulons gratter. Pour les besoins de cet article, nous grattons un exemple de site Web de grattage Web : http://example.grattage web.com.

Ce site Web ne contient que des noms de pays et leurs drapeaux, avec différentes pages et nous allons supprimer trois des pages. Les trois pages sur lesquelles nous travaillerions sont :

http://exemple.grattage web.com/places/default/index/0
http://exemple.grattage web.com/places/default/index/1
http://exemple.grattage web.com/places/default/index/2

De retour à notre spider, nous allons créer un sample_spider.py dans le répertoire des araignées. Depuis le terminal, un simple toucher sample_spider.py la commande aiderait à créer un nouveau fichier.

Après avoir créé le fichier, nous le remplirons avec les lignes de code suivantes :

importation scrapy
 
classe SampleSpider(scrapy.Araignée):
nom = "échantillon"
start_urls = [
"http://exemple.grattage web.com/places/default/index/0",
"http://exemple.grattage web.com/places/default/index/1",
"http://exemple.grattage web.com/places/default/index/2"
]
 
def parse(self, response):
numéro_page = réponse.URL.diviser('/')[-1]
nom_fichier = "page.html".format(numéro_page)
avec open(file_name, 'wb') comme fichier :
déposer.écrire (réponse.corps)

Depuis le niveau supérieur du répertoire du projet, exécutez la commande suivante :

échantillon d'exploration

Rappelons que nous avons donné notre ÉchantillonSpider Classe A Nom attribut goûter.

Après avoir exécuté cette commande, vous remarquerez que trois fichiers nommés page0.html, page1.html, page2.html sont enregistrés dans le répertoire.

Voyons ce qui se passe avec le code :

importation scrapy

Nous importons d'abord la bibliothèque dans notre espace de noms.

classe SampleSpider(scrapy.Araignée):
nom = "échantillon"

Ensuite, nous créons une classe d'araignée que nous appelons ÉchantillonSpider. Notre araignée hérite de râpeux.Araignée. Toutes nos araignées doivent hériter de scrapy.Araignée. Après avoir créé la classe, nous donnons à notre araignée un Nom attribut, ce Nom l'attribut est utilisé pour invoquer l'araignée depuis le terminal. Si vous vous en souvenez, nous avons exécuté le échantillon d'exploration commande pour exécuter notre code.

start_urls = [
 
"http://exemple.grattage web.com/places/default/index/0",
"http://exemple.grattage web.com/places/default/index/1",
"http://exemple.grattage web.com/places/default/index/2"
]

Nous avons également une liste d'urls pour l'araignée à visiter. La liste doit être appelée start_urls. Si vous souhaitez donner à la liste un nom différent, nous devrons définir un start_requests fonction qui nous donne plus de capacités. Pour en savoir plus, vous pouvez consulter la documentation scrapy.

Quoi qu'il en soit, n'oubliez pas d'inclure le http:// ou https:// pour vos liens, sinon vous devrez faire face à une erreur de schéma manquante.

def parse(self, response):

Nous allons ensuite déclarer une fonction d'analyse et lui donner un paramètre de réponse. Lorsque le code est exécuté, la fonction d'analyse est évoquée et l'objet de réponse est envoyé dans lequel contient toutes les informations de la page Web visitée.

numéro_page = réponse.URL.diviser('/')[-1]
nom_fichier = "page.html".format(numéro_page)

Ce que nous avons fait avec ce code est de diviser la chaîne contenant l'adresse et d'enregistrer le numéro de page seul dans un numéro de page variable. Ensuite, nous créons un nom de fichier variable en insérant le numéro de page dans la chaîne qui serait le nom de fichier des fichiers que nous serions en train de créer.

avec open(file_name, 'wb') comme fichier :
déposer.écrire (réponse.corps)

Nous avons maintenant créé le fichier et nous écrivons le contenu de la page Web dans le fichier en utilisant le corps attribut de la réponse objet.

Nous pouvons faire plus que simplement enregistrer la page Web. La bibliothèque BeautifulSoup peut être utilisée pour analyser le corps.réponse. Vous pouvez consulter ce tutoriel BeautiulSoup si vous n'êtes pas familier avec la bibliothèque.

De la page à scrapper, voici un extrait du html contenant les données dont nous avons besoin :

Vous remarquerez que toutes les données nécessaires sont enfermées dans des balises div, nous allons donc réécrire le code pour analyser le code html.
Voici notre nouveau script :

importation scrapy
de l'importation bs4 BeautifulSoup
 
classe SampleSpider(scrapy.Araignée):
nom = "échantillon"
 
start_urls = [
"http://exemple.grattage web.com/places/default/index/0",
"http://exemple.grattage web.com/places/default/index/1",
"http://exemple.grattage web.com/places/default/index/2"
]
 
def parse(self, response):
numéro_page = réponse.URL.diviser('/')[-1]
nom_fichier = "page.SMS".format(numéro_page)
avec open(file_name, 'w') comme fichier :
html_content = BeautifulSoup(réponse.corps, "lxml")
div_tags = html_content.find("div", "id": "résultats")
country_tags = div_tags.find_all("div")
country_name_position = zip(range(len(country_tags)), country_tags)
pour la position, country_name dans country_name_position :
déposer.écrire("numéro de pays  : \n".format(position + 1, country_name.texte))

Le code est à peu près le même que le code initial, mais j'ai ajouté BeautifulSoup à notre espace de noms et j'ai changé la logique de la fonction d'analyse.

Regardons rapidement la logique.

def parse(self, response):

Ici, nous avons défini la fonction d'analyse et lui avons donné un paramètre de réponse.

numéro_page = réponse.URL.diviser('/')[-1]
nom_fichier = "page.SMS".format(numéro_page)
avec open(file_name, 'w') comme fichier :

Cela fait la même chose que discuté dans le code initial, la seule différence est que nous travaillons avec un fichier texte au lieu d'un fichier html. Nous enregistrerions les données grattées dans le fichier texte, et non l'ensemble du contenu Web en html comme précédemment.

html_content = BeautifulSoup(réponse.corps, "lxml")

Ce que nous avons fait dans cette ligne de code est d'envoyer le réponse.corps comme argument à la bibliothèque BeautifulSoup, et a attribué les résultats au html_content variable.

div_tags = html_content.find("div", "id": "résultats")

En prenant le contenu html, nous l'analysons ici en recherchant un div étiquette qui a également et identifiant attribut avec résultats comme c'est la valeur, alors nous arrivons à l'enregistrer dans un balises_div variable.

country_tags = div_tags.find_all("div")

Rappelez-vous que les pays existaient dans div balises aussi, maintenant nous obtenons simplement tous les div balises et les enregistrer sous forme de liste dans le pays_tags variable.

country_name_position = zip(range(len(country_tags)), country_tags)
 
pour la position, country_name dans country_name_position :
déposer.écrire("numéro de pays  : \n".format(position + 1, country_name.texte))

Ici, nous parcourons la position des pays parmi toutes les balises de pays puis nous enregistrons le contenu dans un fichier texte.

Donc dans votre fichier texte, vous auriez quelque chose comme :

pays numéro 1 : Afghanistan
pays numéro 2 :  Îles Aland
pays numéro 3 :  Albanie

Conclusion

Scrapy est sans aucun doute l'une des bibliothèques les plus puissantes du marché, elle est très rapide et télécharge essentiellement la page Web. Il vous donne ensuite la liberté de faire ce que vous voulez avec le contenu Web.

Nous devons noter que Scrapy peut faire beaucoup plus que ce que nous avons vérifié ici. Vous pouvez analyser les données avec les sélecteurs Scrapy CSS ou Xpath si vous le souhaitez. Vous pouvez lire la documentation si vous avez besoin de faire quelque chose de plus complexe.

Meilleures applications de mappage de manette de jeu pour Linux
Si vous aimez jouer à des jeux sur Linux avec une manette de jeu au lieu d'un système de saisie clavier et souris typique, il existe des applications ...
Outils utiles pour les joueurs Linux
Si vous aimez jouer à des jeux sur Linux, il est probable que vous ayez utilisé des applications et des utilitaires comme Wine, Lutris et OBS Studio p...
Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...