J’aimerais récupérer les informations de livres (nom, image, description, auteur) d’une catégorie spécifique (bien-être en l’occurence) sur Amazon. Afin d’en créer une base pour une plate forme de discussion sur ce sujet.
J’ai regardé rapidement, un script python semble suffisant.
Le seul *Hic semble être la description du livre à récupérer.
Peux-tu nous transmettre le lien de la page, je peux jeter un coup d’oeil plus en détail.
J’ai pris le temps de creuser un peu le sujet, c’est plus complexe que je pensais mais loin d’être infaisable.
Je pense pouvoir extraire un échantillon des infos des livres que tu recherches. Je n’ai pas le temps et ma machine non plus d’extraire chaque info pour chaque livre. ( 15 livres / pages, soit 1125 requêtes, ça commence à chiffrer gentiment ^^ )
Pour info quand on commence à taper dans les livre à la page 10/11, il n’y a plus d’auteur sur certain livre.
Si tu connais un peu Python, je peux te passer le script que j’ai effectué à la volé, ou un CSV ou xlsx avec l’échantillon
J’ai testé mon code sur 3/4 pages, je recupere titre, auteur, ISBN.
Je te laisse le code, il peut largement être amélioré.
Pour la clé api, il faut aller sur ScrapperAPI et créer un compte.
import json
from bs4 import BeautifulSoup
import requests
import pandas as pd
def get_asin():
a = []
url = 'https://www.amazon.fr/D%C3%A9veloppement-personnel-Sant%C3%A9-Bien-%C3%AAtre-Livres/b?ie=UTF8&node=302081'
for x in range(1,3): # nombre de pages à scrapper
payload = {'api_key': 'API_KEY', 'url': url} # clé API de scraperAPI à indiquer
request = requests.get('http://api.scraperapi.com', params=payload)
soup = BeautifulSoup(request.text, 'html.parser')
if soup.select('span.pagnRA > a.pagnNext'):
for asin in soup.select('li.s-result-item.celwidget'):
dict = {}
dict['ASIN'] = asin.attrs['data-asin']
a.append(dict)
t= soup.select('span.pagnRA > a.pagnNext')
url = 'https://www.amazon.fr'+t[0].attrs['href']
else:
for asin in soup.select('div.sg-col-20-of-24.s-result-item.sg-col-0-of-12.sg-col-28-of-32.sg-col-16-of-20.sg-col.sg-col-32-of-36.sg-col-12-of-16.sg-col-24-of-28'):
dict = {}
dict['ASIN'] = asin.attrs['data-asin']
a.append(dict)
u = soup.select('li.a-last > a')
url = 'https://www.amazon.fr'+u[0].attrs['href']
return a
asin = get_asin()
b = []
try:
for element in asin:
dict_b = {}
url_article = 'https://www.amazon.com/dp/'+element['ASIN']
payload = {'api_key': 'API_KEY', 'url': url_article}# clé API de scraperAPI à indiquer
req = requests.get('http://api.scraperapi.com', params=payload)
soup = BeautifulSoup(req.text, 'html.parser')
data = soup.find('title')
data_raw = data.contents[0].split(':')
del data_raw[-2:]
dict_b['ISBN'] = data_raw.pop(-1)
dict_b['auteur'] = data_raw.pop(-1)
dict_b['titre'] = str("" .join(data_raw))
b.append(dict_b)
print(b)
except:
pass
df = pd.DataFrame(b)
df.head(len(b))
df.to_csv(r'/GrowthHack.csv')
Si tu veux améliorer le code rapidement, regarde les balises dans le code source de la page Amazon, oû tu as le titre, image, description etc…
Pour expliquer le déroulement, je récupere le code ASIN de chaque livre, puis je vais parcourir chaque page de chaque livre pour prendre les informations.
Pour cela je concatene : URL amazon + code ASIN
J’ai été au plus simple de mon coté, j’ai récupéré la balise title et son contenu que j’ai splitté.