Scrapper les données de plusieurs pages

Résolu
blgnch Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

2 réponses

mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 
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   Statut Membre Dernière intervention  
 
Super, ça marche ! Merci beaucoup !!
0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 
De rien, bonne continuation :-)
1