хотите помочь? Вот ваши варианты:","Crunchbase","О нас","Спасибо всем за потрясающую поддержку!","Быстрые ссылки","Партнерская программа","Премиум","ProxyScrape премиум-проба","Проверка прокси-сервера онлайн","Типы прокси-серверов","Страны-посредники","Примеры использования прокси-сервера","Важно","Политика использования файлов cookie","Отказ от ответственности","Политика конфиденциальности","Условия и положения","Социальные сети","Facebook","LinkedIn","Twitter","Quora","Telegram","Дискорд","\n © Copyright 2024 - Thib BV | Brugstraat 18 | 2812 Mechelen | Belgium | VAT BE 0749 716 760\n"]}
Веб-скреппинг - это искусство извлечения данных из интернета и их использования в значимых целях. Иногда его также называют извлечением данных из Интернета или сбором данных в Интернете. Для новичков это то же самое, что копировать данные из интернета и сохранять их локально. Однако это ручной процесс. Веб-скраппинг
Веб-скреппинг - это искусство извлечения данных из интернета и их использования в значимых целях. Иногда его также называют извлечением данных из Интернета или сбором данных в Интернете. Для новичков это то же самое, что копировать данные из интернета и сохранять их локально. Однако это ручной процесс. Веб-скраппинг - это автоматизированный процесс, который осуществляется с помощью веб-краулеров. Веб-краулеры подключаются к интернету по протоколу HTTP и позволяют пользователю получать данные в автоматическом режиме. Можно рассматривать интернет как обогащенную почву, а данные - как новую нефть, в то время как веб-скрепинг - это техника, позволяющая добывать эту нефть.
Умение собирать и анализировать данные из Интернета стало неотъемлемой техникой, независимо от того, являетесь ли вы специалистом по изучению данных, инженером или маркетологом. Существуют различные сценарии использования, в которых веб-скраппинг может оказать огромную помощь. В этой статье мы будем собирать данные с Amazon с помощью Python. Наконец, мы проанализируем полученные данные и поймем, насколько они важны для любого обычного человека, специалиста по анализу данных или человека, управляющего магазином электронной коммерции.
Небольшое предостережение: Если вы новичок в Python и веб-скреппинге, эта статья может оказаться для вас немного сложнее для понимания. Я бы посоветовал ознакомиться с вводными статьями на сайте ProxyScrape а затем перейти к этой.
Давайте приступим к работе с кодом.
Прежде всего, мы импортируем все необходимые библиотеки, требуемые для работы с кодом. Эти библиотеки будут использоваться для соскабливания и визуализации данных. Если вы хотите узнать подробности о каждой из них, вы можете посетить их официальную документацию.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
импортировать re
импортировать время
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
from urllib.request import urlopen
from bs4 import BeautifulSoup
импортировать запросы
Теперь мы извлечем полезную информацию из книг-бестселлеров Amazon. URL-адрес, по которому мы будем считывать информацию, следующий:
https://www.amazon.in/gp/bestsellers/books/ref=zg_bs_pg_’+str(pageNo)+’?ie=UTF8&pg=’+str(pageNo)
Поскольку нам нужно получить доступ ко всем страницам, мы пройдем по каждой из них, чтобы получить необходимый набор данных.
Для подключения к URL-адресу и получения HTML-содержимого необходимо следующее,
Вот некоторые из важных тегов, под которыми будут храниться наши важные данные,
Если вы осмотрите данную страницу, то увидите родительский тег и соответствующие ему элементы.
Если вы хотите проверить конкретный атрибут, перейдите к каждому из них и проверьте его. Вы найдете несколько важных атрибутов для автора, названия книги, рейтинга, цены, оценки покупателей.
В нашем коде мы будем использовать вложенные операторы if-else, чтобы применить дополнительные выводы для тех авторов, которые не зарегистрированы на 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
Он будет выполнять следующие функции,
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')
Теперь мы загрузим файл csv,
df = pd.read_csv("amazon_products.csv")
df.shape
Форма рамки данных показывает, что в CSV-файле 100 строк и 5 столбцов.
Рассмотрим 5 строк набора данных,
df.head(61)
Теперь мы выполним некоторую предварительную обработку столбцов ratings, customers_rated и price.
df['Рейтинг'] = df['Рейтинг'].apply(lambda x: x.split()[0])
df['Рейтинг'] = pd.to_numeric(df['Рейтинг'])
df["Цена"] = df["Цена"].str.replace('₹', '')
df["Цена"] = df["Цена"].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()
Если мы посмотрим на типы фреймов данных, то получим,
В приведенном выше выводе есть неполная информация. Сначала мы подсчитаем количество NaN, а затем отбросим их.
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()
Сейчас мы познакомимся со всеми авторами, чьи книги имеют самую высокую цену. Мы познакомимся с 20 лучшими из них.
data = data.sort_values(['Рейтинг'],axis=0, ascending=False)[:15]
данные
Теперь мы увидим книги и авторов с самым высоким рейтингом по отношению к рейтингу покупателей. Мы отфильтруем авторов и книги с менее чем 1000 рецензий, чтобы получить самых известных авторов.
data = df[df['Customers_Rated'] > 1000]
data = data.sort_values(['Рейтинг'],axis=0, ascending=False)[:15]
данные
Давайте представим себе книги, занимающие первые места в рейтинге,
p = figure(x_range=data.iloc[:,0], plot_width=800, plot_height=600, title="Лучшие книги с рейтингом более 1000 покупателей", 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
показать(p)
Чем больше оценок, тем выше доверие покупателей. Поэтому будет более убедительно и достоверно, если мы добавим авторов и книги, которые наиболее высоко оцениваются покупателями.
из bokeh.transform import factor_cmap
from bokeh.models import Legend
из bokeh.palettes import Dark2_5 as palette
import itertools
from bokeh.palettes import d3
#colors содержит список цветов, которые могут быть использованы в графиках
colors = itertools.cycle(palette)
palette = d3['Category20'][20]
index_cmap = factor_cmap('Author', palette=palette,
factors=data["Author"])
p = figure(plot_width=700, plot_height=700, title = "Лучшие авторы: Рейтинг по сравнению с оценками клиентов")
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'
p.legend.location = 'top_left'
показать(p)
В этой статье мы рассмотрели, что такое веб-скрепинг, на примере очень важного случая извлечения данных из Amazon. Мы не только извлекли данные с различных страниц Amazon, но и визуализировали их с помощью различных библиотек Python. Эта статья была написана на продвинутом уровне и может быть сложна для понимания людям, которые впервые сталкиваются с веб-скреппингом и визуализацией данных. Для них я бы посоветовал обратиться к статьям стартового пакета, доступным на сайте ProxyScrape. Веб-скреппинг - это очень полезная техника, которая может дать толчок вашему бизнесу. На рынке также есть несколько замечательных платных инструментов, но зачем платить, если можно написать свой собственный скребок. Код, который мы написали выше, может не подойти для каждой веб-страницы, потому что структура страницы может отличаться. Но если вы поняли вышеизложенные концепции, то для вас не будет никаких препятствий, чтобы скрести любую веб-страницу, изменив код в соответствии с ее структурой. Надеюсь, эта статья была интересна читателям. На этом все. Увидимся в следующих!