quer ajudar? Aqui estão suas opções:","Crunchbase","Sobre nós","Obrigado a todos pelo incrível apoio!","Links rápidos","Programa de afiliados","Premium","ProxyScrape teste premium","Verificador on-line Proxy","Proxy tipos","Proxy países","Proxy casos de uso","Importante","Cookie política","Isenção de responsabilidade","Política de privacidade","Termos e condições","Mídia social","Facebook","LinkedIn","Twitter","Quora","Telegrama","Discórdia","\n © Copyright 2024 - Thib BV | Brugstraat 18 | 2812 Mechelen | Bélgica | VAT BE 0749 716 760\n"]}
A Web scraping é a arte de extrair dados da Internet e usá-los para fins significativos. Às vezes, também é conhecida como extração de dados da Web ou coleta de dados da Web. Para os novatos, é o mesmo que copiar dados da Internet e armazená-los localmente. No entanto, é um processo manual. Web scraping
A Web scraping é a arte de extrair dados da Internet e usá-los para fins significativos. Às vezes, também é conhecida como extração de dados da Web ou coleta de dados da Web. Para os novatos, é o mesmo que copiar dados da Internet e armazená-los localmente. No entanto, esse é um processo manual. O site scraping é um processo automatizado que funciona com a ajuda de rastreadores da Web. Os rastreadores da Web se conectam à Internet usando o protocolo HTTP e permitem que o usuário busque dados de forma automatizada. Pode-se considerar a Internet como um solo enriquecido e os dados como o novo petróleo, enquanto a Web scraping é a técnica para extrair esse petróleo.
A capacidade de scrape e analisar os dados da Internet tornou-se uma técnica essencial, seja você um cientista de dados, engenheiro ou profissional de marketing. Pode haver vários casos de uso em que a Web scraping pode ser de grande ajuda. Neste artigo, vamos scrape dados da Amazon usando Python. Por fim, também analisaremos os dados extraídos e veremos como eles são importantes para qualquer pessoa normal, cientista de dados ou pessoa que administra uma loja de comércio eletrônico.
Apenas uma pequena precaução: Se você é novo no Python e na Web scraping, este artigo pode ser um pouco mais difícil de entender. Sugiro que você leia os artigos de nível introdutório em ProxyScrape e, em seguida, este.
Vamos começar com o código.
Em primeiro lugar, importaremos todas as bibliotecas necessárias para o código. Essas bibliotecas serão usadas para scraping e visualizar dados. Se quiser saber os detalhes de cada uma delas, visite a documentação oficial.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import re
import time
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
from urllib.request import urlopen
from bs4 import BeautifulSoup
importar requests
Agora vamos acessar scrape as informações úteis dos livros mais vendidos da Amazon. O URL para o qual estamos indo é scrape :
https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_’+str(pageNo)+’?ie=UTF8&pg=’+str(pageNo)
Como precisamos acessar todas as páginas, faremos um loop em cada página para obter o conjunto de dados necessário.
Para se conectar ao URL e buscar o conteúdo HTML, é necessário o seguinte,
Algumas das tags importantes sob as quais nossos dados importantes residirão são,
Se você inspecionar a página fornecida, verá a tag pai e seus elementos correspondentes.
Se quiser inspecionar um atributo específico, vá até cada um deles e inspecione-os. Você encontrará alguns atributos importantes para o autor, nome do livro, classificação, preço e clientes avaliados.
Em nosso código, usaremos instruções if-else aninhadas para aplicar descobertas extras para os autores que não estão registrados na 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
Isso executará as seguintes funções,
for i in range(1, no_pages+1):
results.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')
Agora, carregaremos o arquivo csv,
df = pd.read_csv("amazon_products.csv")
df.shape
O formato do dataframe mostra que há 100 linhas e 5 colunas no arquivo CSV.
Vamos ver as 5 linhas do conjunto de dados,
df.head(61)
Agora faremos um pré-processamento nas colunas ratings, customers_rated e price.
df['Rating'] = df['Rating'].apply(lambda x: x.split()[0])
df['Rating' ] = pd.to_numeric(df['Rating'])
df["Price"] = df["Price"].str.replace('₹', '')
df["Price"] = df["Price"].str.replace(',', '')
df['Price'] = df['Price'].apply(lambda x: x.split('.')[0])
df['Price'] = df['Price'].astype(int)
df["Customers_Rated"] = df["Customers_Rated"].str.replace(',', '')
df['Customers_Rated'] = pd.to_numeric(df['Customers_Rated'], errors='ignore')
df.head()
Se dermos uma olhada nos tipos de dataframe, teremos,
Há algumas informações incompletas no resultado acima. Primeiro, contaremos o número de NaNs e depois os eliminaremos.
df.replace(str(0), np.nan, inplace=True)
df.replace(0, np.nan, inplace=True)
count_nan = len(df) - df.count()
count_nan
df = df.dropna()
Agora conheceremos todos os autores com o livro de preço mais alto. Vamos nos familiarizar com os 20 principais deles.
dados = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
dados
Agora veremos os livros e autores mais bem avaliados com relação à avaliação dos clientes. Filtraremos os autores e livros com menos de 1.000 avaliações, para obtermos os autores mais famosos.
dados = df[df['Customers_Rated'] > 1000]
dados = data.sort_values(['Rating'],axis=0, ascending=False)[:15]
dados
Vamos visualizar os livros mais bem avaliados,
p = figure(x_range=data.iloc[:,0], plot_width=800, plot_height=600, title="Top Rated Books with more than 1000 Customers Rating", toolbar_location=None, tools="")
p.vbar(x=data.iloc[:,0], top=data.iloc[:,2], width=0.9)
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
show(p)
Quanto maior o número de classificações, maior a confiança do cliente. Portanto, será mais convincente e confiável se adicionarmos os autores e livros mais bem avaliados pelos clientes.
from bokeh.transform import factor_cmap
from bokeh.models import Legend
from bokeh.palettes import Dark2_5 as palette
importar itertools
from bokeh.palettes import d3
#colors tem uma lista de cores que podem ser usadas em gráficos
colors = itertools.cycle(palette)
paleta = d3['Categoria20'][20]
index_cmap = factor_cmap('Author', palette=palette,
factors=data["Author"])
p = figure(plot_width=700, plot_height=700, title = "Top Authors: Rating vs. Customers Rated")
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 = 'CUSTOMERS RATED' (classificação dos clientes)
p.legend.location = 'top_left'
mostrar(p)
Neste artigo, vimos o que é a Web scraping usando um caso de uso muito importante de extração de dados da Amazon. Não apenas extraímos dados de diferentes páginas da Amazon, mas também visualizamos os dados usando diferentes bibliotecas Python. Este artigo é de nível avançado e pode ser difícil de entender para pessoas que não conhecem a Web scraping e a visualização de dados. Para essas pessoas, sugiro que consultem os artigos do pacote inicial disponíveis em ProxyScrape. A Web scraping é uma técnica muito útil que pode impulsionar seus negócios. Há também algumas ferramentas pagas incríveis disponíveis no mercado, mas por que pagá-las se você pode codificar seu próprio raspador? O código que escrevemos acima pode não funcionar para todas as páginas da Web porque a estrutura da página pode ser diferente. Mas, se você entendeu os conceitos acima, não haverá obstáculos para scrape qualquer página da Web modificando o código de acordo com sua estrutura. Espero que este artigo tenha sido interessante para os leitores. Isso é tudo. Vejo vocês nos próximos!