CoderCastrov logo
CoderCastrov
Парсер

Парсинг веб-сайта для поиска цен

Парсинг веб-сайта для поиска цен
просмотров
3 мин чтение
#Парсер

Проведено на платформе Zoom с 23 по 27 ноября.

Парсинг веб-сайта

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

Мой фокус в этом посте больше на практике, чем на теории, поэтому... приступим к делу.

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

  • Selenium: Это инструмент, широко используемый в области тестирования для создания автоматизированных сценариев. Нам нужен этот инструмент, потому что контент, который мы хотим захватить с сайта, загружается динамически. С помощью Selenium мы сможем получить доступ к браузеру и имитировать навигацию по содержимому сайта.
  • BeautifulSoup: Это пакет Python для анализа HTML- и XML-документов, он создает "дерево анализа" для страниц, которые можно использовать для извлечения данных из HTML.

После установки этих пакетов нам нужно решить, какой браузер мы будем использовать для доступа к сайту. В моем случае я выбрал использовать Google Chrome, поэтому я загрузил chromedriver и добавил его в переменную среды "Path". Теперь, наконец, мы готовы к нашему коду.

Давайте импортируем пакеты Python и создадим две переменные, одну для имени продукта и другую для URL-адреса сайта.

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
produto = "a21s"
url = "https://www.zoom.com.br/search?q="+produto

Затем мы создадим экземпляр нашего веб-драйвера, который позволит нам навигировать по странице.

driver = webdriver.Chrome()
driver.get(url)

Если вы правильно следовали всем шагам, при выполнении вашего кода вы должны перейти на эту страницу:

Чтобы взаимодействовать с содержимым страницы, мы будем использовать XPath (XML Path Language), которая является языком запросов для выбора элементов из XML/HTML-документа. Она поможет нам точно и быстро найти конкретный элемент в HTML-коде страницы. Если вы хотите лучше понять, что такое XPath, вы можете прочитать этот отличный пост, который рассказывает об этом.

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

Просто скопируйте HTML-элемент в качестве XPath

Мы будем использовать метод find_element веб-драйвера, передавая XPath элемента в качестве параметра, а затем выполним действие "click" на указанном XPath элементе.

driver.find_element_by_xpath(‘//*[@id=”resultArea”]/div[3]/div/div[1]/div[2]/div[3]/a’).click()

Если вы снова выполните код, вы будете перенаправлены на страницу с перечнем цен на продукт в магазинах.

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

element = driver.find_element_by_xpath('//*[@id="__next"]/div[1]/div[3]/div[2]/div/div/section[4]/div[2]/div[2]/div/ul')
html_content = element.get_attribute('outerHTML')

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

soup = BeautifulSoup(html_content,'html.parser')
lista = soup.findAll(name='li')
for l in lista:
    print('Samsung A21s : '+l.text+'\n')
driver.quit()

Мы используем Beautiful Soup для "разбора" HTML, сохраненного в нашей переменной "html_content", и создаем список со всеми результатами элементов неупорядоченного списка HTML, затем мы перебираем список и печатаем результат. Наконец, мы просто закрываем наше окно браузера с помощью команды "driver.quit()". Вывод в консоли, если вы выполните код, должен быть похож на изображение ниже.

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

Затем, используя инструмент визуализации данных на JavaScript под названием D3, я создал визуализацию, которая показывает изменение цены смартфона во время Black Friday 2020 года.

Ссылка на полный код на GitLab: https://gitlab.com/thiago555sans/webscreaping_zoom/-/blob/master/Zoom.py

Ссылка на блокнот с кодом визуализации, созданной с помощью D3: https://observablehq.com/@thiagosantos/alteracao-de-precos