Crawler des données web avec BeautifulSoup

a marqué ce sujet comme résolu.

là clairement je comprend plus de mon côté c’est bien modifié :

"Il faut ensuite déclarer l’URL de la page à crawler dans une variable(ici url) avec la méthode requests.get, déclarer une autre variable(page) qui contiendra les données de la page brutes pour enfin les fournir à BeautifulSoup :"

alliocha1805

Oui ça c’est la version actuellement en beta. Ce que tu dis là n’est pas correct. Ce que tu cites ici est ce que je cite là, en expliquant que ce n’est pas correct :

Je ne sais pas si tu comprends ce que ton code fait :

Il faut ensuite déclarer l’URL de la page à crawler dans une variable(ici url) avec la méthode requests.get, déclarer une autre variable(page) qui contiendra les données de la page brutes pour enfin les fournir à BeautifulSoup :

1
2
3
url = requests.get("https://zestedesavoir.com/tutoriels/?category=autres-informatique")
page = url.content
soup = BeautifulSoup(page)

Tu n’as pas de variable url contenant l’URL de la page que tu scrapes. (Aussi, déclarer une variable a un sens, déclarer X dans une variable n’en a pas vraiment. Tu peux dire assigner X à une variable si tu veux vraiment utiliser ce type d’explication. Ou déclarer une variable et y assigner X.)

victor
+0 -0

Bah je vais pas tout réécrire ton tuto, mais un truc du genre :

Il faut ensuite déclarer l’URL de la page à crawler dans une variable(ici url) avec la méthode requests.get, déclarer une autre variable(page) qui contiendra les données de la page brutes pour enfin les fournir à BeautifulSoup :

1
2
3
url = requests.get("https://zestedesavoir.com/tutoriels/?category=autres-informatique")
page = url.content
soup = BeautifulSoup(page)

->

La méthode requests.get() permet de récupérer une page web en effectuant une requête http(s). Une fois le résultat obtenu, .content donne accès à la source brute de la page. C’est cet HTML qu’on passe à BeautifulSoup afin de le parser.

1
2
3
4
url = "https://zestedesavoir.com/tutoriels/?category=autres-informatique"
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html)

Ou n’importe quoi qui soit correct. Utiliser la méthode request.get dans une variable, c’est un peu comme Séparer le jaune du blanc d’oeuf dans le four à pain. :D

+0 -0

Salut,

Je viens de lire ton tutoriel, voici la liste des choses qui me viennent en tête. :)

  • Pour les morceaux de code inline, tu devrais utiliser la balise dédiée : du code.
  • Il y a pas mal de fautes d’orthographe ou de typo. Si tu veux de l’aide pour les corriger, n’hésite pas.
  • Les remerciements me paraîtraient mieux placés en conclusion qu’en introduction.
  • Quand tu parles de la bibliothèque csv, j’ai l’impression que tu parles toujours de os (tu dis « Cette bibliothèque »).
  • Je pinaille, mais les titres en majuscules, c’est vraiment pas joli. Je mettrais plutôt « Optionnel » en minuscules. ^^

Salut,

Je viens de lire ton tutoriel, voici la liste des choses qui me viennent en tête. :)

  • Pour les morceaux de code inline, tu devrais utiliser la balise dédiée : du code.
  • Il y a pas mal de fautes d’orthographe ou de typo. Si tu veux de l’aide pour les corriger, n’hésite pas.
  • Les remerciements me paraîtraient mieux placés en conclusion qu’en introduction.
  • Quand tu parles de la bibliothèque csv, j’ai l’impression que tu parles toujours de os (tu dis « Cette bibliothèque »).
  • Je pinaille, mais les titres en majuscules, c’est vraiment pas joli. Je mettrais plutôt « Optionnel » en minuscules. ^^
GCodeur

Merci pour les retours :) Pour les typo/ortho je suis pas contre ton aide (je vais quand même repasser le tuto à la moulinette Antidote avant :) )

Dans ce cours tutoriel

Faut choisir. Et une définition de "scraper" en intro pourrait servir je pense.

Python(2 ou 3 peu importe

Il manque un espace.

cependant les codes de ce tuto seront en Python 3

Je trouve ça mal tourné, je sais pas si c’est juste moi.

Une liste normalement c’est des ; à la fin de chaque ligne et un point sur la dernière.

La bibliothèque Python BeautifulSoup

Le "Python" est nécessaire ?

Le gestionnaire de Paquet Python pip

Pourquoi la majuscule à "Paquet" ? "Python" nécessaire ?

directement depuis votre Terminal.

Pourquoi la majuscule à "Terminal" ?

Pour les commandes d’installation, tu peux en avoir qu’une avec pip install requests bs4 (et bs4 est une abbréviation pour le paquet beautifulsoup4).

nous sommes prêt pour attaquer le vif du sujet

Prêt à attaquer, non ?

Elle n’est pas belle ma soupe de données ?

Pour ce tutoriel nous allons apprendre à crawler

Un "crawler" restant. Et il manque un point à la fin de cette phrase.

J’envoie ça pour l’instant, je continue dans un autre message.

La suite :

Il faut donc que notre script commence donc

2 "donc"

Même chose que l’autre avec la liste.

Une fois cette requête réalisée nous pouvons récupérer

J’aurai mis une virgule après "réalisée".

La variable est mal nommé je trouve, url ne contient pas une URL mais une requests.Response. Tu peux l’appeler response par exemple. Et tu n’as pas besoin de créer une variable intermédiaire, tu peux faire directement soup = BeautifulSoup(response.content).

Nous avons désormais une variable "soup"

Tu peux utiliser la syntaxe de code inline.

Récupérer l’information d’une balise HTML précise

Au lieu de h1.string tu peux utiliser h1.get_text(), je te laisse lire la doc pour voir la différence.

Pour récupérer les informations de la balise h1 de la base nous avons créé une variable dans lequel laquelle

J’ai pas compris "de la base" ?

qui possède la class ico-after ico-tutorials

Classe en français. Et ceux sont deux classes.

Pour remédier à cela nous allons utiliser la méthode .strip()

j’aurai mis une virgule après "cela". Et j’aurai précisé str.strip() pour savoir sur quoi on applique .strip(). Le code qui suit n’a pas besoin d’être sur deux lignes : titre = h1.get_text().strip().

Récupérer les informations de plusieurs balises identiques

le titre de tous les tutoriels de la page je fais comment?

Il manque un espace avant le ?.

jeune impatient!

Pareil.

Pour cela BeautifulSoup à a une autre méthode

Et il manque un point à la fin de cette phrase.

grâce aux compréhensions de liste de Python.

En français ça sonne bizarrement, je sais pas si ça se dit.

et comme valeur de clé les descriptions.

Le "de clé" n’est pas nécessaire.

Pour la partie écriture de fichier, je te conseille d’utiliser un gestionnaire de contexte.

Pour votre information cette méthode(writer.writerow)

Il manque un espace avant la parenthèse ouvrante.

je ne peux que vous recommander la documentation officielle sur le sujet..

Il y a deux points (un dans le lien, un en dehors).

Et voilà vous avez un fichier CSV

J’aurai mis une virgule après "voilà".

dans un logiciel de traitement de données

Et je suis pas sûr qu’on appelle ces logiciels comme ça mais bon.

je ne peux que vous recommander d’aller faire un tour sur la documentation officielle de BeautifulSoup

Il manque un point à la fin.

Je tiens à remercier les membres du site qui m’ont aidés

:)

J’ai fait une passe sur les fautes :

  • « apprendre comment scraper » : apprendre à ?
  • « choses: » : on met une espace avant les signes de ponctuation doubles.
  • « d’installer / mettre à jour / désinstaller » : les slashs ne sont pas très jolis, tu pourrais dire « d’installer, de mettre à jour et de désinstaller ».
  • « PATH » : il faut utiliser la syntaxe pour les codes.
  • « Script » : idem si c’est le nom d’un dossier.
  • « nous sommes prêt » : prêts.
  • La description des bibliothèques importées n’est pas cohérentes : il n’y a pas de majuscule sur le premier élément et tu n’as pas mis de ponctuation à la fin. ;)
  • « titre H1 » : j’écrirais « titre h1 ».
  • « balise h1 » : syntaxe pour les codes.
  • « nous avons créé une variable dans laquelle nous avons dit à BeautifulSoup de récupérer » : la formulation est maladroite (on a récupéré avec BeautifulSoup les infos de la balise puis on les a affectées à la variable).
  • « tag <h1> » : idem pour la syntaxe des codes. Et il faut rester cohérent sur la présence de chevrons ou non.
  • « quel est la balise » : quelle.
  • « class » : classe.
  • « vous pouvez la voir en direct » : « en direct » n’a pas grand sens. ;)
  • « le print » : syntaxe des codes.
  • « générateur de template HTML » : pas vraiment, les templates ne sont pas générés, ce sont eux qui génèrent la page HTML finale.
  • « boucle for » : syntaxe des codes.
  • « avec comme clé » : clés.
  • « comme valeur » : valeurs.
  • « que nous utilisions » : utilisons plutôt, non ?
  • « iterable » : il y a un accent. ^^
Ce sujet est verrouillé.