volete aiutarci? Ecco le opzioni disponibili:","Crunchbase","Chi siamo","Grazie a tutti per l'incredibile supporto!","Collegamenti rapidi","Programma di affiliazione","Premio","ProxyScrape prova premium","Controllore di proxy online","Tipi di proxy","Paesi proxy","Casi d'uso del proxy","Importante","Informativa sui cookie","Esclusione di responsabilità","Informativa sulla privacy","Termini e condizioni","Media sociali","Facebook","LinkedIn","Twitter","Quora","Telegramma","Discordia","\n © Copyright 2024 - Thib BV | Brugstraat 18 | 2812 Mechelen | Belgio | IVA BE 0749 716 760\n"]}
Il web scraping è l'arte di estrarre dati da Internet e di utilizzarli per scopi significativi. A volte è noto anche come estrazione di dati dal web o raccolta di dati dal web. Per i neofiti è come copiare i dati da Internet e memorizzarli localmente. Tuttavia, si tratta di un processo manuale. Scraping del web
Il web scraping è l'arte di estrarre dati da Internet e di utilizzarli per scopi significativi. A volte è noto anche come estrazione di dati dal web o raccolta di dati dal web. Per i neofiti è come copiare i dati da Internet e memorizzarli localmente. Tuttavia, si tratta di un processo manuale. Il web scraping è un processo automatizzato che funziona con l'aiuto dei web crawler. I web crawler si collegano a Internet tramite il protocollo HTTP e consentono all'utente di recuperare i dati in modo automatico. Si può considerare Internet come un terreno arricchito e i dati come il nuovo olio, mentre il web scraping è la tecnica per estrarre quell'olio.
La capacità di scraping e di analisi dei dati da Internet è diventata una tecnica essenziale, sia che siate data scientist, ingegneri o marketer. Ci possono essere diversi casi d'uso in cui lo scraping del web può essere di grande aiuto. In questo articolo, faremo lo scraping di dati da Amazon utilizzando Python. Infine, analizzeremo i dati raschiati e vedremo quanto sia importante per qualsiasi persona normale, scienziato dei dati o persona che gestisce un negozio di e-commerce.
Solo una piccola precauzione: Se siete nuovi a Python e al web scraping, questo articolo potrebbe essere un po' più difficile da capire. Suggerisco di leggere gli articoli introduttivi su ProxyScrape e poi passare a questo.
Iniziamo con il codice.
Prima di tutto, importeremo tutte le librerie necessarie per il codice. Queste librerie saranno utilizzate per lo scraping e la visualizzazione dei dati. Per conoscere i dettagli di ciascuna di esse, si può visitare la loro documentazione ufficiale.
importare pandas come pd
importare numpy come np
importare matplotlib.pyplot come plt
importare seaborn come sns
%matplotlib inline
importare re
importare tempo
da datetime import datetime
importare matplotlib.dates come mdates
importare matplotlib.ticker come ticker
da urllib.request import urlopen
da bs4 import BeautifulSoup
importare richieste
Ora cercheremo di raccogliere le informazioni utili dai libri più venduti su Amazon. L'URL che andremo a raschiare è:
https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_’+str(pageNo)+’?ie=UTF8&pg=’+str(pageNo)
Dal momento che dobbiamo accedere a tutte le pagine, faremo un ciclo su ogni pagina per ottenere il set di dati necessario.
Per collegarsi all'URL e recuperare il contenuto HTML, è necessario quanto segue,
Alcuni dei tag importanti sotto cui risiederanno i nostri dati importanti sono,
Se si ispeziona la pagina data, si vedrà il tag genitore e gli elementi corrispondenti.
Se si desidera esaminare un attributo particolare, è sufficiente andare su ciascuno di essi e controllarli. Troverete alcuni attributi importanti per l'autore, il nome del libro, la valutazione, il prezzo e la valutazione dei clienti.
Nel nostro codice, utilizzeremo dichiarazioni nidificate if-else per applicare risultati extra per quegli autori che non sono registrati su amazon.
no_pages = 2
def get_data(pageNo):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0", "Accept-Encoding":"gzip, deflate", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "DNT":"1","Connection":"close", "Upgrade-Insecure-Requests":"1"}
r = requests.get('https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_'+str(pageNo)+'?ie=UTF8&pg='+str(pageNo), headers=headers)#, proxies=proxies)
content = r.content
soup = BeautifulSoup(content)
#print(soup)
alls = []
for d in soup.findAll('div', attrs={'class':'a-section a-spacing-none aok-relative'}):
#print(d)
name = d.find('span', attrs={'class':'zg-text-center-align'})
n = name.find_all('img', alt=True)
#print(n[0]['alt'])
author = d.find('a', attrs={'class':'a-size-small a-link-child'})
rating = d.find('span', attrs={'class':'a-icon-alt'})
users_rated = d.find('a', attrs={'class':'a-size-small a-link-normal'})
price = d.find('span', attrs={'class':'p13n-sc-price'})
all1=[]
if name is not None:
#print(n[0]['alt'])
all1.append(n[0]['alt'])
else:
all1.append("unknown-product")
if author is not None:
#print(author.text)
all1.append(author.text)
elif author is None:
author = d.find('span', attrs={'class':'a-size-small a-color-base'})
if author is not None:
all1.append(author.text)
else:
all1.append('0')
if rating is not None:
#print(rating.text)
all1.append(rating.text)
else:
all1.append('-1')
if users_rated is not None:
#print(price.text)
all1.append(users_rated.text)
else:
all1.append('0')
if price is not None:
#print(price.text)
all1.append(price.text)
else:
all1.append('0')
alls.append(all1)
return alls
Questo strumento svolge le seguenti funzioni,
per i in range(1, no_pages+1):
risultati.append(get_data(i))
flatten = lambda l: [item for sublist in l for item in sublist]
df = pd.DataFrame(flatten(results),columns=['Book Name','Author','Rating','Customers_Rated', 'Price'])
df.to_csv('amazon_products.csv', index=False, encoding='utf-8')
Ora carichiamo il file csv,
df = pd.read_csv("amazon_products.csv")
df.shape
La forma del dataframe mostra che nel file CSV ci sono 100 righe e 5 colonne.
Vediamo le 5 righe del dataset,
df.head(61)
Ora faremo alcune preelaborazioni sulle colonne ratings, customers_rated e price.
df['Valutazione'] = df['Valutazione'].apply(lambda x: x.split()[0])
df['Valutazione'] = pd.to_numeric(df['Valutazione'])
df["Prezzo"] = df["Prezzo"].str.replace('₹', '')
df["Prezzo"] = df["Prezzo"].str.replace(',', '')
df['Prezzo'] = df['Prezzo'].apply(lambda x: x.split('.')[0])
df['Prezzo'] = df['Prezzo'].astype(int)
df["Clienti_Rati"] = df["Clienti_Rati"].str.replace(',', '')
df['Customers_Rated'] = pd.to_numeric(df['Customers_Rated'], errors='ignore')
df.head()
Se diamo un'occhiata ai tipi di dataframe, otteniamo,
L'output sopra riportato contiene alcune informazioni incomplete. Conteremo prima il numero di NaN e poi li elimineremo.
df.replace(str(0), np.nan, inplace=True)
df.replace(0, np.nan, inplace=True)
count_nan = len(df) - df.count()
conteggio_nan
df = df.dropna()
Ora conosceremo tutti gli autori con il libro più costoso. Conosceremo la top 20 di questi autori.
dati = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
dati
Ora vedremo i libri e gli autori più votati rispetto alla valutazione dei clienti. Filtreremo gli autori e i libri con meno di 1000 recensioni, in modo da ottenere gli autori più famosi.
dati = df[df['Customers_Rated'] > 1000]
dati = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
dati
Visualizziamo i libri più votati,
p = figura(x_range=data.iloc[:,0], plot_width=800, plot_height=600, title="Libri più votati con più di 1000 valutazioni da parte dei clienti", toolbar_location=Nessuno, tools="")
p.vbar(x=data.iloc[:,0], top=data.iloc[:,2], width=0.9)
p.xgrid.grid_line_color = Nessuno
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
mostra(p)
Più sono le valutazioni, maggiore è la fiducia dei clienti. Quindi sarà più convincente e credibile se aggiungiamo gli autori e i libri più votati dai clienti.
da bokeh.transform importare factor_cmap
da bokeh.models import Legend
da bokeh.palettes import Dark2_5 as palette
importare itertools
da bokeh.palettes import d3
#colors ha un elenco di colori che possono essere usati nei grafici
colori = itertools.cycle(palette)
palette = d3['Categoria20'][20]
index_cmap = factor_cmap('Author', palette=palette,
fattori=dati["Autore"])
p = figura(larghezza_trama=700, altezza_trama=700, titolo = "Autori migliori: Valutazione vs. Clienti valutati")
p.scatter('Rating','Customers_Rated', source=data, fill_alpha=0.6, fill_color=index_cmap, size=20, legend='Author')
p.xaxis.axis_label = 'RATING'
p.yaxis.axis_label = 'VALUTAZIONE DEI CLIENTI'
p.legend.location = 'top_left'
mostra(p)
In questo articolo abbiamo visto cos'è il web scraping prendendo in considerazione un caso d'uso molto importante: l'estrazione di dati da Amazon. Non solo abbiamo estratto i dati da diverse pagine Amazon, ma abbiamo anche visualizzato i dati utilizzando diverse librerie Python. Questo articolo è di livello avanzato e potrebbe essere difficile da capire per chi è alle prime armi con il web scraping e la visualizzazione dei dati. Per loro, suggerisco di consultare gli articoli dello starter pack disponibili su ProxyScrape. Il web scraping è una tecnica molto utile che può dare una spinta alla vostra attività. Sul mercato sono disponibili anche alcuni strumenti a pagamento, ma perché pagarli quando si può creare il proprio scraper. Il codice che abbiamo scritto qui sopra potrebbe non funzionare per ogni pagina web, perché la struttura della pagina potrebbe essere diversa. Ma se avete compreso i concetti sopra esposti, allora non ci sono ostacoli per la scansione di qualsiasi pagina web modificando il codice in base alla sua struttura. Spero che questo articolo sia stato interessante per i lettori. Questo è tutto. Ci vediamo nei prossimi!