Scrapper les données de plusieurs pages

Résolu/Fermé
blgnch Messages postés 6 Date d'inscription jeudi 12 mai 2022 Statut Membre Dernière intervention 19 mai 2022 - Modifié le 16 mai 2022 à 10:06
mamiemando Messages postés 33344 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 novembre 2024 - 13 mai 2022 à 20:33
Bonjour, je souhaite scrapper une donnée qui est l'avis des consommateurs. Les avis sont présents sur plusieurs pages. Je ne sais pas vraiment comment m'y prendre pour scrapper la meme donnée sur plusieurs pages. Voici mon code, mais il ne fonctionne pas :

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}

titre_SC = [] 

def getQuestions(page):
    url = f'https://fr.trustpilot.com/review/www.backmarket.fr?page={page}'
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(url, 'html.parser')
    noms_SC = soup.findAll(name='p', attrs={'class': "typography_typography__QgicV typography_body__9UBeQ typography_color-black__5LYEn typography_weight-regular__TWEnf typography_fontstyle-normal__kHyN3"})
 
    for element in noms_SC:
      titre_SC.append(element.text)
    return


for x in range(1,150):
    getQuestions(x)

df = pd.DataFrame(titre_SC)
df.to_excel('titre.xlsx', index=False)
print('Fin.')


Le resultat est celui ci :
/usr/local/lib/python3.7/dist-packages/bs4/__init__.py:336: UserWarning: "https://fr.trustpilot.com/review/www.backmarket.fr?page=1" looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an HTTP client like requests to get the document behind the URL, and feed that document to Beautiful Soup.
' that document to Beautiful Soup.' % decoded_markup

2 réponses

mamiemando Messages postés 33344 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 novembre 2024 7 803
Modifié le 12 mai 2022 à 15:27
Bonjour,

Avant d'appeler BeautilfulSoup, il te faut télécharger le contenu de la (des) page(s) web concernée(s) et stocker le résultat dans une chaînes. Une manière de procéder est d'utiliser le module
requests
(module qu'il faudra installer, sous Linux (Debian, Ubuntu) :
sudo apt install python3-requests
; sous Windows :
pip install requests
).

Ensuite, il suffit de récupérer lancer une requête vers l'URL qui t'intéresse et récupérer le contenu HTML dans la réponse obtenue.

import requests

session = requests.Session()
response = session.get("https://www.google.fr")
text = response.text
print(text)


Il est possible si tu as vraiment beaucoup de pages et que celles-ci mettent du temps à être collectées de paralléliser le téléchargement avec un appel asynchone (voir cette page).

Une fois les pages récupérées tu peux commencer à utiliser
BeautilfulSoup
.

Bonne chance
0
blgnch Messages postés 6 Date d'inscription jeudi 12 mai 2022 Statut Membre Dernière intervention 19 mai 2022
12 mai 2022 à 17:06
Super, ça marche ! Merci beaucoup !!
0
mamiemando Messages postés 33344 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 novembre 2024 7 803
13 mai 2022 à 20:33
De rien, bonne continuation :-)
1