Лекция по созданию парсера от CyberSec Rutor. 17.04.2024

CyberSec RuTOR

Кибербезопасность
Команда форума
Модератор
Сообщения
1.000
Реакции
1.433
22975502-1665158436.jpg


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

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


Для парсинга мы будем использовать две популярные библиотеки Python: Requests и BeautifulSoup.
Requests - это библиотека, которая позволяет отправлять HTTP-запросы и получать ответы от веб-серверов. С её помощью мы можем загружать HTML-код веб-страниц.

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

Python:
Код:
pip install requests
pip install beautifulsoup4

Теперь мы готовы к написанию кода. Импортируем необходимые библиотеки в наш скрипт:

Код:
Copy codeimport requests
from bs4 import BeautifulSoup

Следующий шаг - определить функцию, которая будет выполнять парсинг. Назовем её parse_data(). Внутри этой функции мы будем отправлять HTTP-запросы, получать HTML-код страницы и извлекать нужные данные.

Но прежде чем отправлять запросы, нам нужно позаботиться о том, чтобы сайт не заблокировал нас, приняв за бота. Для этого мы можем установить специальные заголовки (headers) и куки (cookies) в наших запросах, чтобы имитировать поведение обычного браузера.

Следующий шаг - определить функцию, которая будет выполнять парсинг. Назовем её parse_data(). Внутри этой функции мы будем отправлять HTTP-запросы, получать HTML-код страницы и извлекать нужные данные.

Но прежде чем отправлять запросы, нам нужно позаботиться о том, чтобы сайт не заблокировал нас, приняв за бота. Для этого мы можем установить специальные заголовки (headers) и куки (cookies) в наших запросах, чтобы имитировать поведение обычного браузера.


Код:
Copy codeheaders = {[/SIZE][/CENTER]
[SIZE=7][CENTER]    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://www.google.com/',
    'Connection': 'keep-alive',
}

cookies = {
    'session_id': 'abc123def456',
    'user_token': '1234567890',
}


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

Теперь мы можем отправить GET-запрос на нужную страницу, передав заголовки и куки:

Код:
Код:
Copy codeurl = 'https://example.com/page'[/SIZE][/CENTER][/SIZE][/CENTER]
[SIZE=7][CENTER][SIZE=7][CENTER]response = requests.get(url, headers=headers, cookies=cookies)


Если запрос успешен (код ответа 200), мы получим HTML-код страницы в объекте response. Чтобы начать обработку этого кода, создадим объект BeautifulSoup:

Copy codesoup = BeautifulSoup(response.content, 'html.parser')

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

Допустим, нам нужно найти все элементы <div> с классом "product" на странице. Мы можем сделать это так:

Copy codeproducts = soup.find_all('div', class_='product')

Метод find_all() вернет список всех подходящих элементов. Затем мы можем перебрать этот список и извлечь нужные данные из каждого элемента:
Код:
Copy codefor product in products:[/SIZE][/CENTER]
[SIZE=7][CENTER]    name = product.find('h3', class_='product-name').text.strip()
    price = product.find('span', class_='product-price').text.strip()
    print(f'Name: {name}, Price: {price}')


Здесь мы находим элементы с классами "product-name" и "product-price" внутри каждого элемента product, извлекаем их текстовое содержимое с помощью атрибута text и очищаем от лишних пробелов с помощью метода strip().


Давайте рассмотрим еще несколько полезных методов BeautifulSoup:

  • find(): находит первый элемент, соответствующий заданным критериям.
  • find_all(): находит все элементы, соответствующие заданным критериям.
  • get_text(): получает текстовое содержимое элемента, включая содержимое всех вложенных элементов.
  • get(): получает значение указанного атрибута элемента.

    Вот примеры использования этих методов:

    Copy code# Найти первый элемент <h1> на странице
    title = soup.find('h1')

    # Найти все элементы <a> внутри <div> с классом "menu"
    menu_links = soup.find('div', class_='menu').find_all('a')

    # Извлечь текст из элемента
    text = element.get_text()

    # Извлечь значение атрибута "href" из ссылки
    url = link.get('href')

    Помните, что структура HTML-кода может меняться со временем, поэтому ваши селекторы должны быть достаточно гибкими. Если парсер перестает работать из-за изменений на сайте, не бойтесь исследовать HTML-код в инспекторе браузера и адаптировать свой код соответственно.
    Еще один важный аспект парсинга - обработка исключений и ошибок. Иногда страница может быть недоступна, или элемент, который вы ищете, отсутствует на странице. Чтобы ваш парсер не завершался с ошибкой в таких случаях, используйте блоки try-except:

    Код:
    Код:
    Copy codetry:[/SIZE][/CENTER]
     [SIZE=7][CENTER]    title = soup.find('h1', class_='page-title').text.strip()
     except AttributeError:
         title = 'Заголовок не найден'
    Теперь давайте рассмотрим более полный пример парсера, который извлекает последние новости с сайта:


    Код:
    Copy codeimport requests
     from bs4 import BeautifulSoup
     
     def parse_news():
         url = 'https://example.com/news'
         
         response = requests.get(url)
         soup = BeautifulSoup(response.text, 'html.parser')
         
         news_list = soup.find('ul', class_='news-list')
         news_items = news_list.find_all('li')
         
         for item in news_items:
             title = item.find('h2').text.strip()
             description = item.find('p').text.strip()
             date = item.find('span', class_='date').text.strip()
             
             print(f'Title: {title}')
             print(f'Description: {description}')
             print(f'Date: {date}')
             print('---')
     
     parse_news()

    В этом примере мы находим список новостей по селектору ul.news-list, а затем извлекаем заголовок, описание и дату из каждого элемента новости.

    1713363316070.png


    На этом мы завершаем нашу лекцию о парсинге веб-страниц с помощью Python. Конечно, это только начало, и для более сложных задач парсинга вам понадобится больше знаний и практики. Но я надеюсь, что эта лекция дала вам хорошую отправную точку и вдохновила на дальнейшее изучение.
    А я вам с этим обязательно помогу! С каждой новой лекцией мы будем разбирать различные темы, которые вы можете предлагать мне в личке!


    Если у вас есть вопросы - не стесняйтесь задавать. Желаю вам успехов в ваших проектах по парсингу!

 
  • Истец Ответчик
  • #2
Спасибо!
 
Рад наблюдать активность с данного акк. Давно Вас небыло.
Лекции ожидаются?
 
А как парсить сайты с обфурсированным кодом? Ещё могу предложить сделать лекцию по авторизации при парсинге, ведь некоторые сайты предоставляют не всю информацию для не авторизованных пользователей.
 

Похожие темы

Перед тем как мы начнем писать код, давайте разберемся, что же такое базы данных и зачем они нужны. База данных - это организованная коллекция данных, которая хранится и управляется с помощью специального программного обеспечения, называемого системой управления базами данных (СУБД). Базы данных...
Ответы
1
Просмотры
  • Закрыта
Разберем как создавать свои парсеры и его основы. Расскажу вам понятным языком и поговорим об этом 17.04.24 в 17:00 по МСК Для записи на лекцию ставим + под постом либо пишем лектору @CyberSec RuTOR в ЛС с пометкой База даных
Ответы
21
Просмотры
Доброго времени суток! В данной статье я вам покажу, как можно добыть много прокси различных стран. Приступим. Для работы скрипта нам необходим Python. Установим 3.10.6 После установки Python, необходимо установить библиотеки для получения прокси и их проверки на работоспособность. После...
Ответы
0
Просмотры
860
Изучаем Xenforo на примере Rutor (Python,OSINT) В большинстве своем сейчас многие популярные форумы используют используют движок Xenforo. Как таковых известных уязвимостей в нем нет. Или я пока не нашел) Однако в этой статьи мы рассмотрим интересные особенности, которые позволяют получать...
Ответы
38
Просмотры
Python - это один из наиболее популярных языков программирования в мире, который используется для создания приложений, веб-сайтов, игр и многого другого. Для начинающих программистов Python - отличный выбор, так как он имеет простой и понятный синтаксис и множество библиотек, которые делают его...
Ответы
22
Просмотры
Назад
Сверху Снизу