[Парсинг | Python] — ниша в которую легко вкатится и сложно продолжить

от автора

Привет Хабр!

Сегодня я бы хотел написать об такой нише как парсинг, так-как я пристрастился к Python только благодаря тому что я люблю халяву свободные данные, а так-же и с пониманием того что данные в удобном формате это не просто куча структурированных данных это будущее. Что сейчас мы и видим в эру ИИ.

Из чего будет состоять это статья? Она будет разбита на 3 части:

  1. Что такое парсинг? (Для новичков)

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

  3. Как вкатиться в парсинг? (DevTools, HTML, Python)

Хочу предупредить для продвинутых, что в статье я не затрону глубоко selenium, playwright, headers обходы, proxy, и иные обходы так-как я захотел написать всё простым языком, что-бы новички которые хотят поковыряться в парсинге понимали на что подписываются.

Что такое парсинг (Простыми словами)

Парсинг — это автоматизированный сбор, анализ и структурирование данных из внешних источников (чаще всего сайтов) с помощью специальных программ-парсеров

Так пишет Google при запросе парсинг, это коротко и ясно, но по моему мнению она закрывает целый спектр эмоций которое вызывает это творчество. Я считаю что парсинг это про умение думать как разработчик, как человек который проектировал сайт Backend, это про умение находить наилучшие решение, с помощью анализа, это как играть в детектива. Вот моё определение слово парсинг

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

Для чего нужен парсинг

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

Как на этом заработать?

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

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

Где можно ещё использовать?

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

  1. Обучение ИИ на своём дата сете, этот вариант самый сложный, но и самый сладкий.

  2. Создание собственного ТГ бота, с парсингом погоды в вашем городе и рассылкой всем пользователям.

  3. Создать сайт как и говорилось в начале этого отрывка.

Вы можете увидеть пример данного проекта в моей прошлой статье

Как вкатиться в парсинг?

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

Базовый пример парсера

import requestsfrom bs4 import BeautifulSoupresponse = requests.get("http://example.com") # Делаем запрос к сайтуsoup = BeautifulSoup(response.text, "html.parser") # Парсим страницуtitle = soup.find("h1") # ищетprint(title.text)

Поздравляю это ваш первый парсер, конечно это всего-то тестовый пример, и он скрывает за собой кучи нюансов, по типу ошибки со статусами, недоступен интернет но для первого раза сойдёт.

DevTools — друг, а не враг

Нажмите F12 на клавиатуре, что вы видите? Наверное странное поле с кучей данных, это DevTools, набор разработчика для отладки, и мы будем его использовать, для примера будем использовать мой сайт из прошлой статьи.

API — Лучший вариант из всех возможных

API — данные приходят прямо, уже в удобной форме, нужно лишь найти такие запросы

Блюр так-как это NSFW контент

Блюр так-как это NSFW контент

Мы видим как мы получаем данные прямо из API, из ссылки «pages?page=1&per_page=24«, это бинго! При дальнейшем анализа мы узнаём что данные возвращаются при условии что в конце есть page и per_page. Значение этих параметров и за что они отвечают нам сразу ясны, но во многих сайтах есть иные параметры что требуют более глубокого анализа.

Инструкция о том как облегчить жизнь

Инструкция о том как облегчить жизнь

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

import requestsheaders = {    'Accept': 'application/json',    'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,eu;q=0.6',    'Connection': 'keep-alive',    'Origin': 'http://192.168.0.50:8000',    'Referer': 'http://192.168.0.50:8000/',}params = {    'page': '1',    'per_page': '24',}response = requests.get('http://192.168.0.50:8080/api/v1/pages', params=params, headers=headers, verify=False)data = response.json()

Данный код даёт возможность полностью повторить запрос, от начало и до конца.

Голый парсинг — имеем что имеем

Если данные не приходят через fetch то придётся довольствоваться тем что нам пришло прямо в документе, для этого существует прекрасная библиотека beautifulsoup, интуитивный парсинг find, find_all. Это идеально инструмент, но в будущем рекомендуется поменять find, на select так-как они гибче, и пишутся проще.

Ищем тэги и иные параметры

Ищем тэги и иные параметры

мы видим что данные хранятся в классе «manga» с тэгом «a» как это будет выглядеть в BS4?

import requestsfrom bs4 import BeautifulSoupresponse = requests.get("http://192.168.0.50:8000") # Делаем запрос к сайтуsoup = BeautifulSoup(response.text, "html.parser") # Парсим страницуfor manga in soup.find_all("a", class_ = "manga"):  print(manga.get("href"))

Мы получим только ссылки, так-как мы выводим то что в атрибуте. Это уже можно назвать парсером, и вроде-бы вопрос где тут сложность? И вы будете правы, так-как на моём сайте 0 защиты, и что было-бы если была анти бот защита?

import requestsresponse = requests.get("https://www.dns-shop.ru/")print(response.status_code)

Мы увидим 401, и не увидим наших данных, так-как сайт имеет защиту Qrator, что за гранью моего понимание, и для этого были созданы такие специальные инструменты как Selenium, playwright, и. т. д. Но о них по позже.

Заключение

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

ссылка на оригинал статьи https://habr.com/ru/articles/1025760/