темный логотип proxyscrape

Руководство для начинающих по изучению веб-скрапинга и визуализации данных с помощью Python

Путеводители, Python, Скрапинг, Дек-00-20215 минут чтения

How can you pull significant information from websites fastly and efficiently? It takes a lot of time to extract the data manually. You can use web scraping, an automated method of acquiring non-tabular or poorly structured data from websites. Later, you can convert that data into a structured and usable format such as a spreadsheet

Оглавление

Как быстро и эффективно извлекать важную информацию с веб-сайтов? Извлечение данных вручную занимает много времени. Вы можете воспользоваться веб-скреппингом - автоматизированным методом получения нетабличных или плохо структурированных данных с веб-сайтов. Позже вы можете преобразовать эти данные в структурированный и пригодный для использования формат, например в электронную таблицу или файл .csv.

Веб-скрепинг позволяет архивировать данные и отслеживать их изменения в режиме онлайн. Предприятия широко используют его для различных целей. Например, интернет-магазины используют его для сопоставления цен конкурентов и общедоступных страниц. Затем они используют эту информацию для корректировки своих цен. Другой распространенной практикой веб-скрапинга является контактный скрапинг, при котором организации собирают личные данные, такие как номера телефонов или адреса электронной почты, для маркетинговых целей. 

Почему используется веб-скраппинг?

Зачем кому-то нужно извлекать большие объемы информации с веб-сайтов? Чтобы понять это, посмотрите на следующие области применения веб-скреппинга.

  • Исследования и разработки - Вы можете собирать большие массивы данных (температура, общая информация и т. д.) с веб-сайтов и анализировать их для проведения опросов в целях исследований и разработок.
  • Сравнение цен - такие компании и сервисы, как ParseHub, используют веб-скрепинг для сбора данных с сайтов интернет-магазинов и сравнения цен на товары.
  • Объявления о вакансиях - с помощью веб-скреппинга вы можете собирать информацию о вакансиях и собеседованиях с различных сайтов и размещать их в одном месте. 
  • Скраппинг социальных сетей - с помощью веб-скраппинга можно собирать данные с сайтов социальных сетей, таких как Instagram, Twitter, и выяснять, что сейчас в тренде.
  • Сбор адресов электронной почты - Многие компании используют электронную почту в качестве средства маркетинга. Они используют веб-скраппинг для сбора идентификаторов электронной почты и последующей массовой рассылки писем.

Веб-скрапинг с помощью Python

Вы можете соскабливать данные с веб-сайтов, выполнив следующие действия.

  • Получите URL-адрес, который вы хотите соскоблить
  • Осмотрите страницу
  • Найдите данные, которые необходимо извлечь
  • Напишите код
  • Запустите код и извлеките данные
  • Сохраните данные в нужном формате

Библиотеки, которые мы можем использовать для веб-скраппинга в Python, следующие:

Pandas - Pandas используется для манипулирования и анализа данных. С помощью этой библиотеки вы можете извлекать данные и сохранять их в нужном формате.

Beautiful Soup - это пакет Python для разбора HTML- и XML-документов. Он создает деревья разбора, которые помогают легко извлекать данные с веб-сайтов.

Requests - Это простая библиотека HTTP.

Мы будем использовать этот сайт для получения данных о количестве случаев COVID. После этого мы проанализируем данные и создадим несколько визуализаций.

Импорт библиотек

Вы можете импортировать запросы и BeautifulSoup в Python для веб-скрапинга, как показано ниже.

импортировать запросы 
из bs4 import BeautifulSoup

URL-адрес для поиска данных

Укажите URL-адрес веб-сайта, с которого нужно получить данные. Вы должны использовать метод requests.get() , чтобы отправить GET-запрос на указанный URL. Далее необходимо создать конструктор BeautifulSoup, который будет принимать два строковых аргумента, как показано в следующем коде.

url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
страница = requests.get(url) 
soup = BeautifulSoup(page.text, 'html.parser') 
  
data = []

Соскоблите каждый элемент

С помощью метода soup.find_all() можно отсканировать каждый элемент в таблице URL'sURL's. Он возвращает объект, который предлагает доступ к найденным вхождениям на основе индекса и может быть выведен с помощью цикла for или while .

data_iterator = iter(soup.find_all('td'))

Использование цикла

Вы можете использовать цикл while True, который повторяется до тех пор, пока в итераторе не появятся данные.

while True: 
   try: 
        страна = next(data_iterator).text 
        подтверждено = next(data_iterator).text 
        смерти = next(data_iterator).text 
        континент = next(data_iterator).text

Для столбцов "подтверждено" и "смертей" убедитесь, что вы убрали запятые и преобразовали их в int

data.append(( 
            страна, 
            (confirmed.replace(', ', '')), 
            (deaths.replace(',', '')), 
            континент
        )) 
    
    except StopIteration: 
       break

Когда количество элементов, оставшихся для итерации, равно нулю, будет выдана ошибка StopIteration.

Создание фрейма данных Pandas

Выполнив приведенный выше код, вы сможете извлечь данные с сайта. Для дальнейшего анализа данных необходимо создать фрейм данных Pandas . В приведенном ниже коде мы отсортировали данные по количеству подтвержденных случаев COVID.

Импортируйте библиотеку pandas, чтобы создать кадр данных.

data.sort(key = lambda row: row[1], reverse = True)
import pandas as pd
df = pd.DataFrame(data,columns=['country','Number of cases','Deaths','Continent'],dtype=float)
df.head()
df['Число случаев'] = [x.replace(',', '') for x in df['Число случаев']]
df['Количество случаев'] = pd.to_numeric(df['Количество случаев'])
df

Вы получите следующий результат:

Чтобы получить информацию о Dataframe, используйте df.info().

df.info()

Создайте столбец Death_rate

Мы создадим новый столбец с именем Death_rate, как показано ниже.

dff = df.sort_values(by ="Количество случаев",ascending = False)
dff['Коэффициент_смертности'] = (dff['Смертность']/dff['Количество случаев'])*100
dff.head()

На выходе получаем следующее.

Веб-скрапинг с помощью прокси-серверов

Прокси-сервер позволяет вам использовать уникальный IP-адрес для доступа к информации, которую вы хотите соскрести. Таким образом, веб-сайт не видит ваш реальный IP-адрес, что позволяет вам собирать данные анонимно. Использовать прокси-серверы для веб-скрапинга необходимо по следующим причинам.

  • С помощью пула прокси-серверов вы можете отправлять несколько одновременных запросов к веб-серверу, не получая запрета.
  • С помощью прокси можно делать запросы с определенного места, устройства, интернет-провайдера, мобильной сети. Можно также просматривать контент, отображаемый для определенной области или устройства.
  • Некоторые сайты имеют запрет на IP-адреса, и вы можете обойти его с помощью прокси-серверов. 

Типы прокси-серверов для веб-скрапинга

Вы можете использовать два приведенных ниже прокси-сервера для поиска данных с веб-сайтов.

  • Прокси для дата-центров - IP-адреса дата-центров - это IP-адреса серверов. Серверы расположены в центрах обработки данных. Основная цель прокси-центров - скрыть ваш адрес от сайтов, которые вы просматриваете. Эти прокси используются в основном для сбора бизнес-данных.
  • Резидентные прокси - Резидентные IP-адреса дороже, чем IP-адреса центров обработки данных, и их трудно получить. Эти прокси позволяют выбрать конкретное местоположение, т. е. город, страну и т. д., и пользоваться Интернетом как реальный пользователь в этой географической зоне.

Визуализация данных с помощью Python

Вы знаете, что визуализация данных - это графическое представление данных или информации. Вы можете использовать такие визуальные инструменты, как диаграммы, карты и графики, в качестве доступного способа понимания представленных данных. Давайте посмотрим, как можно визуализировать извлеченные данные с этого сайта с помощью инструментов визуализации данных.

Импорт библиотек

Для визуализации данных необходимо импортировать следующие библиотеки, как показано ниже.

import seaborn as sns
import matplotlib.pyplot as plt
from pylab import rcParams

Построение парного графика

Вы можете построить парный график, чтобы продемонстрировать парные отношения в наборе данных. Вы можете легко реализовать это с помощью приведенного ниже кода и выявить тенденции в данных для последующего анализа.

rcParams['figure.figsize'] = 15, 10
из matplotlib.pyplot import figure
figure(num=None, figsize=(20, 6), dpi=80, facecolor='w', edgecolor='k')
sns.pairplot(dff,hue='Continent')

Вы получите результат в виде.

Построение гистограммы

Вы можете построить гистограмму, которая отображает категориальные данные в виде прямоугольных столбиков и сравнивает значения различных категорий в данных. 

sns.barplot(x = "Страна",y = "Количество случаев",data = dff.head(10))

На выходе получаем следующее.

Построение диаграммы рассеяния

Понять взаимосвязь между числовыми значениями можно с помощью диаграммы рассеивания. Она использует точки для отображения взаимосвязи между переменными. 

sns.scatterplot(x = "Число случаев", y = "Смертность", hue = "Континент", data = dff)

На выходе получаем следующее.

Группировка и сортировка данных

В приведенном ниже коде мы сгруппируем данные по континентам и отсортируем их по количеству случаев COVID.

dfg = dff.groupby(by = 'Continent',as_index = False).agg({'Number of cases':sum,'Deaths':sum})
dfgg = dfg[1:]
df1 = dfgg.sort_values(by = 'Number of cases',ascending = False)
df1['Death_rate'] = (df1['Deaths']/df1['Number of cases'])*100
df1.sort_values(by = 'Death_rate',ascending = False)

На выходе получаем следующее.

Теперь построим гистограмму между "Continent" и "Death_rate", как показано ниже.

sns.barplot(x = 'Continent',y = 'Death_rate',data = df1.sort_values(by = 'Death_rate',ascending = False))

На выходе получаем следующее.

На этой гистограмме видно, что среди всех стран самый высокийуровень смертности наблюдается в Южной Америке, а самый низкий - в Австралии. 

Импортируйте текстовую таблицу

Установите texttable для создания простой ASCII-таблицы. Затем импортируйте ее как tt.

!pip install texttable

import texttable as tt

Создайте объект texttable

Необходимо создать объект texttable, как показано ниже. В начале таблицы нужно добавить пустую строку для заголовков и выровнять столбцы.

table = tt.Texttable() 

table.add_rows([(None, None, None, None, None)] + data) table.set_cols_align(('c', 'c', 'c', ' c'))  # 'l' обозначает левую сторону, 'c' - центр, а 'r' - правую сторону 
table.header((' Страна ', ' Число случаев ', ' Смертность ', ' Континент ')) 
  
print(table.draw())

Здесь вывод представляет некоторые строки таблицы в виде.

Заключение

С помощью веб-скреппинга вы можете быстро и эффективно извлекать большие объемы данных с веб-сайтов. Извлеченные неструктурированные данные можно преобразовать в удобный для использования формат, например в файл .csv. Мы видели, как можно соскребать данные с веб-сайтов с помощью двух модулей - Pandas и BeautifulSoup. Прокси позволяют извлекать данные из Интернета анонимно. Для поиска информации в Интернете можно использовать как прокси центра обработки данных, так и жилые прокси. Жилые прокси более надежны, но стоят дороже, чем центральные. Далее мы можем провести анализ данных, чтобы получить полезную информацию в соответствии с нашими потребностями. В этой статье мы проанализировали данные с помощью таких инструментов визуализации данных, как столбчатые диаграммы, парные диаграммы и диаграммы рассеяния.