Le webScraping est le "grattage Web (où Web récolte donnée Internet de l'extraction) est une technique de logiciel informatique de l'extraction d'informations à partir de sites web".
Lorsque nous cherchons un bug, identifier sur un système une partie qui ne sera pas conforme au bon fonctionnement des logiciels qui tourne dessus, nous est amenée à récolter et à analyser des données.L'HTML analysé est facile en Python, en particulier avec l'aide de la bibliothèque Beautiful Soup.
On a beaucoup d'autres librairies possibles pour ce type de pratique. J'ai voulu partager ce programme qui n'est pas optimisé au maximum de ses capacités, attention, je ne traite pas encore de tout. Je partagerai bientôt d'autres programmes travaillés en C++ et python voire même Perl qui nous permettra de travailler sur les couches réseaux.Mais chaque chose en son temps. Vous avez sur Hackdemics des tutoriels conséquents sur le sujet, ainsi que ceux que j'ai partagés dernièrement sur SSL/TLS et SMTP.
Modules à installer, Dépendances :
tldextract
Beautiful Soup 4
Requests
Python V3.4
Je sais que Fred sera réticent, c'est normal, chacun a leurs préférences, personnellement j'utilise le module sur le moment. Mais Beautiful a cette chance d'avoir depuis 2004 été de sauver par les programmeurs.
Beautiful Soup se trouve au sommet des analyseurs Python comme lxml et html5lib, vous permettant d'essayer différentes stratégies d'analyse. On apprécie sa flexibilité et surtout sa librairie présentant de nombreuses fonctions facilement utilisables.
Ce que j'essaie de montrer est qu'avec des connaissances l'on peut facilement établir des petits programmes afin de réaliser des techniques simples.Le code suivant a été réalisé en 2h de temps, je n'ai donc pas traité les erreurs (except), ni chercher à optimiser certaines parties, ni à extraire sur un fichier, mais surtout à créer rapidement un script utilisant beautiful, request et tdlextract afin que vous perceviez leurs utilisations au sein d'un programme.
Si ces modules vous intéressent, ils peuvent être étendus plus sur un spectre d'action plus large que le mien.
Code:
#------------------------------------------------------------------------------- # Name: Scraping URL # Purpose: Extract URL avec différentes techniques # # Author: DM && Helios # # Created: 06/10/2015 # Copyright: (c) DMH 2015 # Licence: Free #------------------------------------------------------------------------------- # -*- coding: cp1252 -*- # -*- coding: UTF-8 -*- ##### Modules import ##### from bs4 import BeautifulSoup import requests import urllib.request import re import tldextract import os ##### Mise en place des Fonctions ##### ##### Utilisation de Beautiful afin de Parser une URL, simple et efficace ##### def Scraping(): url = input ("Entrer a website à Parser (www.site.com): ") r = requests.get("http://" +url) data = r.text soup = BeautifulSoup(data, "html.parser") for link in soup.find_all('a'): print(link.get('href')) ##### Utilisation de tldextract et quelques unes de ces fonctions de bases, rapide et précise ##### def Extract(): Extract = input ("Entrer l'url d'un site à extraire : ") Ext = tldextract.extract(Extract) print (Ext, Ext.subdomain, Ext.domain, Ext.suffix, Ext.registered_domain, '.'.join(Ext[:2])) ##### Request une star dans les modules tout comme urllib ##### def ExtractHTML(): url = input("Entrer l'URL du Website :") req = urllib.request.Request(url) resp = urllib.request.urlopen(req) respData = resp.read() print(respData) ##### On reprend les même sauf que l'on va préciser l'extraction de la page ##### def ExtractOnly(): url = input("Entrer l'URL du Website :") req = urllib.request.Request(url) resp = urllib.request.urlopen(req) respData = resp.read() balise = input ("Entrer les balises à extraire (p,a,...): ") balises = re.findall(r'<' + balise + '>(.*?)</' + balise + '>',str(respData)) # Tapez p pour récupéré ce qui se situe entre les balises p print (paragraphs) def menu(): os.system("clear") print ("###################################################") print ("# Scraping Website #") print ("# Scrap & Extract #") print ("# ----------------- #") print ("# DreAmuS/HelioS #") print ("###################################################") print ("") print (" [+] 1 - Scraping les Liens d'un website") print (" [+] 2 - Extraire les Noms de Domaines") print (" [+] 3 - Extraire HTML") print (" [+] 4 - Extraire une partie de l'URL") print (" [+] 5 - Quitter") print ("-------------------------------------------------) choix = int(input("Tapez Votre Choix >>> ")) if (choix == 1): Scraping() menu() elif (choix ==2): Extract() menu() elif (choix == 3): ExtractHTML() menu() elif (choix == 4): ExtractOnly() menu() elif (choix == 5): quit else: menu() if __name__=="__main__": menu()
1 - Scraping les Liens d'un website : On va scraper les liens en rapport avec le NDD
2 - Extraire les Noms de Domaines : On va extraire les NDD en rapport
3 - Extraire HTML : On va extraire l'url de la page demandé
4 - Extraire une partie de l'URL : On va extraire une partie spécifique (exemple: on met l'url d'une page et p qui scrapera que ce qu'il y a entre <p> et </p>)
5 - Quitter : On quitte le programme qui reviens en boucle
Ainsi, vous verrez qu'il est possible d'utiliser cette première ébauche pour rajouter des modules et fonctions afin de par exemple comme l'avait à l'époque cet anglais en scrapant l'intégralité des fichiers d'une prison, en tâtonnant et en précisant son script sur les bonnes balises. Il avait ainsi sans avoir besoin de voir la page, enregistrer sous un fichier texte les fiches de tous les détenus, prouvant ainsi la puissance du Scraping devant des obstacles.
La recherche de l'information, base de la communication web, est facilité au travers du langage Python .
Dans son dernier poste, Fred nous expliquait comment avec Python et le module lxml, il avait pu récupérer les mp3 d'un site. Je souhaitais utiliser d'autres voies afin de vous montrer le potentiel de Python. Le Scraping peut être utilisé pour tous types d'action sur le web.
La prochaine fois, je partagerais un script que je déploirais sur réseau avec sa version C++, perl et python.
En espérant cela vous a plu.
Commentaire