Гайд - 📊 Как написать свой первый ПАРСЕР на PYTHON 📝 Простыми словами | End Way - форум программирования и сливов различных скриптов
  • Присоединяйтесь к нам в телеграм канал! EndWay канал | EndSoft канал | EWStudio канал
  • Хочешь поставить скрипт, но не умеешь?
    А может ты хочешь свой скрипт на основе слитого?

    Тогда добро пожаловать в нашу студию разработки!

    Телеграм бот: EWStudioBot
    Телеграм канал: EWStudio

Гайд 📊 Как написать свой первый ПАРСЕР на PYTHON 📝 Простыми словами

noproblems+REP

Нейросеть
Автор темы
25 Дек 2022
110
1,041
93
Привет, добрый день ну или же добрый вечер вам

Сегодня мы рассмотрим как написать свой первый парсер для сайта на Python
Всё расскажу простыми словами для начинаюших кодеров


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

1690094471345

С чего начнем?
Возьмем за основу наш любимый форум EndWay.Su и напишем на нем парсинг статистики.
Так же не забываем установить все библиотеки

Код:
pip install requests bs4 lxml


Для начало возьмем импорты наших основных библиотек для нашего файла:
Python:
import requests
from bs4 import BeautifulSoup as bs


Requests - это библиотека, позволяющая взаимодействовать с веб-серверами и получать данные с веб-страниц. Она делает работу с HTTP-запросами простой и удобной.
Некоторые могут спросить, почему не использовать aiohttp или httpx, но в данном гайде я предпочитаю описать самый простой подход для новичков, чтобы всё было максимально понятно. Обычно для простых парсеров достаточно стандартных библиотек.

BeautifulSoup - также важным инструментом для работы с HTML и XML документами. С её помощью можно легко находить, навигировать и извлекать информацию из структурированных данных HTML.
Для удобства взаимодействия с этими библиотеками, можно создать алиасы, например, "bs" для BeautifulSoup или можно "req" для Requests. Это упростит взаимодействие с кодом.

Далее возьмем код страницы EndWay.Su:

Python:
page = requests.get('https://endway.su/')

Здесь мы берем страницу. Если вывести сейчас page, то у нас выведится Response.
Чтобы получить код страницы стоит дописать .text, и тогда вы увидим весь код страницы

Python:
page = requests.get('https://endway.su/').text

После чего мы делаем инициализацию BeautifulSoup:
Python:
content = bs(page.text, 'lxml')
Здесь мы указываем код страницы с помощью .text и так же выбираем функцию парсинга lxml. Есть так же html.parser, но не столько важно это.

Теперь мы ищем наш требуемый элемент парсинга. Нажимает F12 и выбираем в Инспекторе слева сверху стрелочку с окошком и выбираем наш элемент:

NVIDIA Share iOgxZN2NZU
После нажатия на элемент текста у нас будет выделен справа в Инспекторе <dd> тег. Он нам и нужен, но пока нам нужно найти сам блок где он хранится.

Как мы видим он хранится в div и так же ниже в dl заголовке:

NVIDIA Share M74fyDBI4S

Теперь идем в код и прописываем поиск.
Указываем нашу переменную с данными bs. И так же в функции .find прописываем наши параметры, в нашем случае это <dl> и так же запятую. После в словаре указываем class и "pairs--flex":

Python:
search = content.find('dl', {'class':'pairs--flex'})

Теперь можем вывести данные и получим:
Код:
<dl class="pairs--flex">
<dd>2,186</dd>
<dt>Созданных тем</dt>
</dl>

Но как же вывести число тем? Очень просто на самом деле!
В конце нашего search дописываем еще .find функцию и делаем поиск в этом случае <dd>. Так как у нас там число тем.

Python:
search = content.find('dl', {'class':'pairs--flex'}).find('dd')

В данном случае получим:
Код:
<dd>2,186</dd>

А так же уберем наши теги <dd> очень простой дописью .text в конце нашей же строки
Python:
search = content.find('dl', {'class':'pairs--flex'}).find('dd').text
Наш результат:
Код:
2,186

Надеюсь я всё понятно расписал для тех кто только начинает в питоне и пробует на нем кодить.

Весь код нашего парсинга:
Python:
import requests
from bs4 import BeautifulSoup as bs

page = requests.get('https://endway.su/')
content = bs(page.text, 'lxml')
search = content.find('dl', {'class':'pairs--flex'}).find('dd').text
print(search)
 
Последнее редактирование:
Like
  • 9
Реакции: 8 users

bandicuttt

Сеньор
int('xyi')
8 Янв 2023
235
64
28
Хорошо описано, для питонкидсов покатит. А так вообще было бы круто больше примеров работы парсинга какой-то более сложной структуры. Хотя бы несколько вложенностей в контейнеры без нейма. Или когда контейнеры имеют одинаковый класс. Разницу find и find_all, ну короче кайф. Ждём новый статьи !
 
Like
  • 1
Реакции: 1 user

inf0man

Джун
30 Июн 2023
136
11
0
Как можно спарсить все посты определённого канала Дзен?
Т.е. получается сначала нужно получить все ссылки на статьи, а потом парсить каждую страницу отдельно?
 
Активность:
Пока что здесь никого нет