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

Web Scraping For Beginners: Основы и фреймворк с использованием Python

Python, Скрапинг, Мар-01-20215 минут чтения

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

В этой статье мы рассмотрим основы веб-скрейпинга, играя с фреймворком Python под названием Beautiful Soup. В качестве среды кодирования мы будем использовать Google Colab.

Шаги, связанные с веб-скраппингом с помощью Python

  1. Прежде всего, нам нужно определить веб-страницу, которую мы хотим соскоблить, и отправить HTTP-запрос на этот URL. В ответ сервер вернет HTML-содержимое веб-страницы. Для этой задачи мы будем использовать стороннюю HTTP-библиотеку для обработки python-запросов.
  2. После того как мы успешно получили доступ к содержимому HTML, основная задача переходит к разбору данных. Мы не можем обрабатывать данные просто через обработку строк, поскольку большинство данных HTML вложены. Именно здесь на помощь приходит парсер, который создает вложенную древовидную структуру HTML-данных. Одной из самых продвинутых библиотек парсера HTML является html5lib.
  3. Далее следует обход дерева, который включает в себя навигацию и поиск по дереву разбора. Для этого мы будем использовать Beautiful Soup (стороннюю библиотеку Python). Эта библиотека Python используется для извлечения данных из HTML- и XML-файлов.

Теперь мы увидели, как работает процесс веб-скреппинга. Давайте приступим к кодированию,

Шаг 1: Установка сторонних библиотек

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

pip install requests
pip install html5lib
pip install bs4
Шаг2: Доступ к HTML-содержимому веб-страницы
импорт запросов 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.content)

Он отобразит вывод формы,

Давайте попробуем разобраться в этом куске кода,

  1. В первой строке кода мы импортируем библиотеку requests.
  2. Затем мы указываем URL-адрес веб-страницы, которую хотим соскоблить.
  3. В третьей строке кода мы отправляем HTTP-запрос на указанный URL и сохраняем ответ сервера в объекте под названием r.
  4. Наконец, print(r.content) возвращает необработанное HTML-содержимое веб-страницы.
Шаг 3: Разбор содержимого HTML
импортировать запросы 
из bs4 import BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Если эта строка вызывает ошибку, выполните 'pip install html5lib' или установите html5lib 
print(soup.prettify())
Выход:

Он выдает очень длинный результат; некоторые скриншоты прилагаются ниже.

Одна из самых замечательных особенностей Beautiful Soup заключается в том, что он построен на основе библиотек разбора HTML, таких как html5lib, html.parse, lxml и т. д., что позволяет одновременно создавать объект Beautiful Soap и указывать библиотеку парсера. 

В приведенном выше коде мы создали объект Beautiful Soup, передав ему два аргумента:

r.content: Необработанное содержимое HTML.
html5lib: Указывает парсер HTML, который мы хотим использовать.

Наконец, выводится soup.prettify(), давая дереву разбора визуальное представление из исходного HTML-содержимого.

Шаг 4: Поиск и навигация по дереву разбора

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

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Прежде чем двигаться дальше, рекомендуется просмотреть HTML-содержимое веб-страницы, которое мы распечатали с помощью метода soup.prettify(), и попытаться найти шаблон для перехода к цитатам.

Теперь я объясню, как это сделать в приведенном выше коде, 

Если мы перейдем по кавычкам, то обнаружим, что все они находятся внутри контейнера div, id которого - 'all_quotes'. Поэтому мы находим этот элемент div (в коде он обозначен как table) с помощью метода find():

table = soup.find('div', attrs = {'id':'all_quotes'})

Первым аргументом в этой функции является HTML-тег, который необходимо найти. Второй аргумент - элемент типа словаря для указания дополнительных атрибутов, связанных с этим тегом. Метод find() возвращает первый подходящий элемент. Чтобы лучше понять, что делает эта часть кода, можно попробовать table.prettify().

Если мы сосредоточимся на элементе table, контейнер div будет содержать каждую цитату, класс которой равен quote. Поэтому мы пройдемся по каждому контейнеру div, класс которого равен quote.

Здесь очень полезен метод findAll(), который по аргументам похож на метод find(), но главное отличие в том, что он возвращает список всех совпадающих элементов. 

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

Давайте проанализируем один пример содержимого HTML-строки для лучшего понимания:

Теперь рассмотрим следующий фрагмент кода:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Здесь мы создаем словарь для сохранения всей информации о цитате. Для доступа к вложенной структуре используется точечная нотация. Чтобы получить доступ к тексту внутри HTML-элемента, мы используем .text:

Кроме того, мы можем добавлять, удалять, изменять и получать доступ к атрибутам тега. Для этого мы рассматриваем тег как словарь:

quote['url'] = row.a['href']
Затем мы добавили все цитаты в список под названием quotes

Наконец, мы создадим CSV-файл, который будет использоваться для сохранения наших данных.

filename = 'inspirational_quotes.csv'

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

В приведенном выше выводе мы показали только три строки, но на самом деле их 33. Это означает, что мы извлекли значительный объем данных с веб-страницы, просто попробовав сделать это. 

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

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

Некоторые из реальных сценариев, в которых веб-скраппинг может быть полезен, таковы,

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

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

  • Его можно использовать для анализа рыночных тенденций.
  • Это поможет нам предсказать рыночные цены.
  • Это позволяет оптимизировать точки входа в зависимости от потребностей клиента.
  • Это может быть очень полезно для мониторинга конкурентов.
Создать объявления

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

Сравнить информацию

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

Совокупная информация

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

  1. С помощью веб-скреппинга можно собрать наиболее точные и релевантные статьи.
  2. Он поможет собрать ссылки на полезные видео и статьи.
  3. Стройте графики в соответствии с новостями.
  4. Улавливайте тенденции по мнению читателей новостей.

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

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