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

Веб-скрепинг, регулярные выражения и визуализация данных - и все это на Python

Python, Скрапинг, Ноябрь-02-20225 минут чтения

Оглавление

Веб-скрепинг можно определить как метод сбора и реструктуризации данных с веб-сайтов. Его также можно определить как программный подход к автоматизированному получению данных с веб-сайта. Например, вы хотите извлечь идентификаторы электронной почты всех людей, прокомментировавших пост в Facebook. Это можно сделать двумя способами. Во-первых, вы можете навести курсор на строку адреса электронной почты любого человека. Затем вы можете скопировать и вставить его в файл. Этот метод известен как ручной скраппинг. Но что делать, если вам нужно собрать 2000 идентификаторов электронной почты? С помощью инструмента веб-скреппинга вы можете извлечь все идентификаторы электронной почты за 30 секунд, а не за 3 часа, как при ручном скреппинге.

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

Веб-скрапинг в Python

В Python есть отличные инструменты для извлечения данных из Интернета. Например, вы можете импортировать библиотеку requests для получения содержимого веб-страницы и bs4(BeautifulSoup) для извлечения нужной информации. Вы можете выполнить следующие шаги для веб-скрапинга в Python. Мы будем извлекать информацию с этого сайта. 

Запросы на импорт:

Чтобы получить HTML-файл сайта, необходимо импортировать библиотеку запросов
запросы на импорт

GET-запрос:

Вам нужно сделать GET-запрос к сайту. Это можно сделать, вставив URL в функцию requests.get().
r = requests.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

Извлеките содержимое:

Извлеките содержимое сайта с помощью r.content. Он выдает содержимое сайта в байтах. 
c = r.content

Импортируйте BeautifulSoup:

Вам необходимо импортировать библиотеку BeautifulSoup, поскольку она позволяет легко соскабливать информацию с веб-страниц.

из bs4 import BeautifulSoup

Создайте объект супа:

Вам нужно создать объект BeautifulSoup из содержимого и разобрать его с помощью нескольких методов.

суп = BeautifulSoup(c)
print(soup.get_text())

На выходе (это только часть) вы получите примерно следующее.

Извлечение полезных данных:

Мы должны найти правильные CSS-селекторы, чтобы извлечь нужные нам данные. Мы можем найти основное содержимое веб-страницы с помощью метода .find() объекта soup.
main_content = soup.find('div', attrs = {'class': 'entry-content'})

Используйте атрибут .text:

Мы можем получить информацию в виде текста из таблицы, используя атрибут.text для супа.
content = main_content.find('ul').text
print(content)

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

Регулярные выражения в Python

Регулярные выражения(RegEx) - это последовательность шаблонов, определяющих схему поиска. Основная идея заключается в следующем:
  • Определите шаблон, который нужно сопоставить с текстовой строкой. 
  • Поиск в строке для возврата совпадений.

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

  • Заработная плата
  • Названия колледжей
  • Имена президентов

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

Шаг 01:

Импортируйте re и для извлечения зарплат создайте шаблон зарплат. Используйте метод re.compile() для компиляции шаблона регулярного выражения, представленного в виде строки, в объект шаблона RegEx. Далее можно использовать pattern.findall(), чтобы найти все совпадения и вернуть их в виде списка строк. Каждая строка будет представлять одно совпадение.
импорт re
шаблон_зарплаты = re.compile(r'\$.+')
зарплаты = salary_pattern.findall(content)

Шаг 02:

Повторите ту же процедуру для извлечения названий колледжей. Составьте шаблон и извлеките названия. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

Шаг 03:

Повторите ту же процедуру для извлечения имен президентов. Составьте шаблон и извлеките нужные имена. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

Шаг 04:

Зарплаты выглядят беспорядочно и не поддаются пониманию. Поэтому для преобразования строковых зарплат в числа мы используем понимание списка в Python. Для достижения желаемых результатов мы будем использовать нарезку строк, разделение и соединение, а также понимание списка.

зарплата = ['$876 001', '$543 903', '$2453 896']
[int(''.join(s[1:].split(',')) for s in salaries]

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

Визуализация данных в Python

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

Мы можем использовать matplotlib для визуализации данных, как показано ниже.

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

import pandas as pd
import matplotlib.pyplot as plt

Создайте фрейм данных pandas, содержащий школы, имена и зарплаты. Например, школы можно преобразовать в кадр данных следующим образом:

df_school = pd.DataFrame(schools)
print(df_school)

Выходные данные:

Аналогичным образом можно поступить с зарплатами и именами.

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

df.plot(kind='barh', x = 'President', y = 'salary')

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

Зачем нужны прокси-серверы для веб-скрапинга?

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

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

Знаете ли вы, сколько прокси необходимо для получения всех вышеперечисленных преимуществ? Вы можете рассчитать необходимое количество прокси, используя эту формулу:

Количество прокси = Количество запросов доступа / Crawl Rate

Количество запросов на доступ зависит от следующих параметров.

  • Частота, с которой скрепер извлекает информацию с веб-сайта
  • Количество страниц, которые пользователь хочет соскоблить

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

Использование прокси-серверов в Python

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

  • Вам необходимо импортировать модуль Python's requests.
запросы на импорт
  • Вы можете создать пул прокси-серверов для их ротации.
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
  • Вы можете использовать requests.get() для отправки GET-запроса, передав прокси в качестве параметра URL.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • Вы можете получить содержимое запрошенного URL, если нет ошибки соединения.
печать(страница.текст)

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

Заключение

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