quer ajudar? Aqui estão as suas opções:","Crunchbase","Sobre nós","Obrigado a todos pelo fantástico apoio!","Ligações rápidas","Programa de afiliados","Prémio","ProxyScrape ensaio premium","Tipos de proxy","Países substitutos","Casos de utilização de proxy","Importante","Política de cookies","Declaração de exoneração de responsabilidade","Política de privacidade","Termos e condições","Redes sociais","Facebook","LinkedIn","Twitter","Quora","Telegrama","Discórdia","\n © Copyright 2024 - Thib BV | Brugstraat 18 | 2812 Mechelen | Bélgica | VAT BE 0749 716 760\n"]}
O Web scraping é a arte de extrair dados da Internet e utilizá-los para fins significativos. Por vezes, também é conhecida como extração de dados da Web ou recolha de dados da Web. Para os principiantes, é o mesmo que copiar dados da Internet e armazená-los localmente. No entanto, trata-se de um processo manual. Raspagem da Web
O Web scraping é a arte de extrair dados da Internet e utilizá-los para fins significativos. Por vezes, também é conhecida como extração de dados da Web ou recolha de dados da Web. Para os principiantes, é o mesmo que copiar dados da Internet e armazená-los localmente. No entanto, trata-se de um processo manual. A raspagem da Web é um processo automatizado que funciona com a ajuda de Web crawlers. Os Web crawlers ligam-se à Internet através do protocolo HTTP e permitem ao utilizador ir buscar dados de forma automatizada. Pode considerar-se a Internet como um solo enriquecido e os dados como o novo petróleo, enquanto a recolha de dados da Web é a técnica para extrair esse petróleo.
A capacidade de extrair e analisar os dados da Internet tornou-se uma técnica essencial, quer se trate de um cientista de dados, engenheiro ou profissional de marketing. Pode haver vários casos de utilização em que a recolha de dados da Web pode ser de grande ajuda. Neste artigo, vamos extrair dados da Amazon utilizando Python. Por fim, também analisaremos os dados extraídos e veremos a sua importância para qualquer pessoa normal, cientista de dados ou pessoa que gere uma loja de comércio eletrónico.
Apenas uma pequena precaução: Se és novo em Python e em web scraping, este artigo pode ser um pouco mais difícil de compreender. Eu sugeriria passar pelos artigos de nível introdutório em ProxyScrape e depois vir para este.
Vamos começar com o código.
Em primeiro lugar, vamos importar todas as bibliotecas necessárias para o código. Estas bibliotecas serão utilizadas para a recolha e visualização de dados. Se quiser saber os detalhes de cada uma, pode visitar a sua documentação oficial.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib em linha
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 pedidos
Agora vamos extrair as informações úteis dos livros mais vendidos na Amazon. O URL que vamos utilizar é:
https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_’+str(pageNo)+’?ie=UTF8&pg=’+str(pageNo)
Uma vez que precisamos de aceder a todas as páginas, vamos percorrer cada página para obter o conjunto de dados necessário.
Para estabelecer a ligação ao URL e obter o conteúdo HTML, é necessário o seguinte,
Algumas das etiquetas importantes em que residem os nossos dados importantes são
Se inspecionar a página em questão, verá a etiqueta principal e os elementos correspondentes.
Se pretender inspecionar um atributo específico, vá a cada um deles e inspeccione-os. Encontrará alguns atributos importantes para o autor, o nome do livro, a classificação, o preço e a classificação dos clientes.
No nosso código, utilizaremos instruções if-else aninhadas para aplicar conclusões adicionais aos autores que não estão registados 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
Esta função tem 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')
Vamos agora carregar o ficheiro csv,
df = pd.read_csv("amazon_products.csv")
df.shape
A forma do quadro de dados mostra que existem 100 linhas e 5 colunas no ficheiro CSV.
Vejamos as 5 linhas do conjunto de dados,
df.head(61)
Vamos agora efetuar algum 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["Preço"] = df["Preço"].str.replace('₹', '')
df["Preço" ] = df["Preço"].str.replace(',', '')
df['Preço'] = df['Preço'].apply(lambda x: x.split('.')[0])
df['Preço'] = df['Preço'].astype(int)
df["Clientes_Rated"] = df["Clientes_Rated"].str.replace(',', '')
df['Clientes_Rated'] = pd.to_numeric(df['Clientes_Rated'], errors='ignore')
df.head()
Se dermos uma vista de olhos nos tipos de dataframe, obtemos,
Existe alguma informação incompleta no resultado acima. Começamos por contar o número de NaNs e depois eliminamo-los.
df.replace(str(0), np.nan, inplace=True)
df.replace(0, np.nan, inplace=True)
count_nan = len(df) - df.count()
contagem_nan
df = df.dropna()
Vamos agora conhecer todos os autores com o livro mais caro. Iremos familiarizar-nos com os 20 melhores.
dados = dados.sort_values(['Rating'],axis=0, ascending=False)[:15]
dados
Veremos agora os livros e autores mais bem classificados no que diz respeito à classificação dos clientes. Filtraremos os autores e livros com menos de 1000 avaliações, para obtermos os autores mais famosos.
dados = df[df['Clientes_Classificados'] > 1000]
dados = dados.sort_values(['Rating'],axis=0, ascending=False)[:15]
dados
Vamos visualizar os livros mais bem classificados,
p = figure(x_range=data.iloc[:,0], plot_width=800, plot_height=600, title="Livros mais bem classificados com mais de 1000 avaliações de clientes", toolbar_location=None, tools="")
p.vbar(x=data.iloc[:,0], top=data.iloc[:,2], width=0.9)
p.xgrid.grid_line_color = Nenhum
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/2
mostrar(p)
Quanto maior for o número de classificações, maior será a confiança dos clientes. Assim, será mais convincente e credível se adicionarmos os autores e livros mais bem classificados 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 utilizadas em gráficos
cores = itertools.cycle(paleta)
paleta = d3['Categoria20'][20]
mapa_de_índices= mapa_de_factores('Autor', paleta=paleta,
factores=dados["Autor"])
p = figure(plot_width=700, plot_height=700, title = "Top Authors: Classificação vs. Clientes avaliados")
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 = 'CLASSIFICAÇÃO DOS CLIENTES'
p.legend.location = 'top_left'
mostrar(p)
Neste artigo, vimos o que é a raspagem da Web, utilizando um caso de utilização 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 foi um artigo de nível avançado e pode ser difícil de entender para pessoas que são novas em web scraping e visualização de dados. Para eles, sugiro que consultem os artigos do pacote inicial disponíveis em ProxyScrape. O Web scraping é uma técnica muito útil que pode dar um impulso ao seu negócio. Existem também algumas ferramentas pagas fantásticas disponíveis no mercado, mas porquê pagá-las se pode codificar o seu próprio scraper. O código que escrevemos acima pode não funcionar para todas as páginas Web, porque a estrutura da página pode ser diferente. Mas se compreendeu os conceitos acima, então não existem obstáculos para que possa fazer scraping de qualquer página web, modificando o código de acordo com a sua estrutura. Espero que este artigo tenha sido interessante para os leitores. Isso é tudo. Vejo-vos nos próximos!