Скрэйпинг (Scraping) - Лена Капаца
Скрэйпинг (Scraping) by Лена Капаца Jan. 15, 2024 Основы

Cкрейпинг (парсинг) — процесс извлечения информации с веб-сайтов. Это включает в себя анализ HTML-кода веб-страниц, извлечение текстовой информации, изображений, ссылок и других данных. Суть скрейпинга заключается в автоматизированном сборе данных, что позволяет улучшить процессы анализа, мониторинга и принятия решений. 

Пример скрейпера

Для начала импортируем необходимые библиотеки:

 

from google.cloud import bigquery
from selenium import webdriver;
from selenium.webdriver.common.by import By
import asyncio
import os
import pandas as pd
import re
import telegram

 

Укажем, сколько раз жать кнопку "Еще":

 

MAX_LOAD_MORE_CLICKS = 5

 

Инициируем экземпляр веб-драйвера, чтобы открыть страницу:

 

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

 

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

 

reviews_lst = []
urls_lst = []
dates_lst = []

 

Откроем страницу и выберем HTML-элементы с текстом ("col-xs-10"), ссылкой ("read-more-serm") и датой ("divh1 red"):

 

count = 0
while count <= MAX_LOAD_MORE_CLICKS:
    try:
        WebDriverWait(driver, DELAY)

        full_reviews = driver.find_elements(By.XPATH, "//*[@class='col-xs-10']")
        for element in full_reviews:
            # Вырежем пустые оценки по критериям 
            text = element.text.replace('Читать полностью отзыв и комментарии', '')
            reviews_lst.append({'text': text})


        # Выделим ссылки на отзывы
        urls = driver.find_elements(By.XPATH, "//*[@class='read-more-serm']/a")

        for element in urls:
            review_absolute_path = element.get_attribute("href")
            urls_lst.append(review_absolute_path)


        dates = driver.find_elements(By.XPATH, "//*[@class='divh1 red']")
        for element in dates:
            element = element.text
            when = re.sub(' \|(.*)', '', element)
            dates_lst.append(when)
        i = 0
        while i < len(reviews_lst):
            review = {'text': reviews_lst[i]['text'], 'when': dates_lst[i], 'url': urls_lst[i]}
            reviews.append(review)
            i += 1
            
        count += 1
    except TimeoutException:
        break
        
        

Сольем результат в Датафрейм (DataFrame):


scrapedReviews = pd.DataFrame(reviews)
scrapedReviews.insert(0, 'id', range(0, 0 + len(scrapedReviews)))
scrapedReviews.to_csv('scrapedReviews.csv', index=False)

© Лена Капаца. Все права защищены.