Почему стоит научиться «парсить» сайты, или как написать свой первый парсер на Python
Для начала давайте разберемся, что же действительно означает на первый взгляд непонятное слово — парсинг. Прежде всего это процесс сбора данных с последующей их обработкой и анализом. К этому способу прибегают, когда предстоит обработать большой массив информации, с которым сложно справиться вручную. Понятно, что программу, которая занимается парсингом, называют — парсер. С этим вроде бы разобрались.
Перейдем к этапам парсинга.
- Поиск данных
- Извлечение информации
- Сохранение данных
И так, рассмотрим первый этап парсинга — Поиск данных.
Так как нужно парсить что-то полезное и интересное давайте попробуем спарсить информацию с сайта work.ua.
Для начала работы, установим 3 библиотеки Python.
pip install beautifulsoup4
Без цифры 4 вы ставите старый BS3, который работает только под Python(2.х).
pip install requests
pip install pandas
Теперь с помощью этих трех библиотек Python, можно проанализировать нашу веб-страницу.
Второй этап парсинга — Извлечение информации.
Попробуем получить структуру html-кода нашего сайта.
Давайте подключим наши новые библиотеки.
import requests from bs4 import BeautifulSoup as bs import pandas as pd
И сделаем наш первый get-запрос.
URL_TEMPLATE = "https://www.work.ua/ru/jobs-odesa/?page=2" r = requests.get(URL_TEMPLATE) print(r.status_code)
Статус 200 состояния HTTP — означает, что мы получили положительный ответ от сервера. Прекрасно, теперь получим код странички.
print(r.text)
Получилось очень много, правда? Давайте попробуем получить названия вакансий на этой страничке. Для этого посмотрим в каком элементе html-кода хранится эта информация.
Комірник
У нас есть тег h2 с классом «add-bottom-sm», внутри которого содержится тег a. Отлично, теперь получим title элемента a.
soup = bs(r.text, "html.parser") vacancies_names = soup.find_all('h2', class_='add-bottom-sm') for name in vacancies_names: print(name.a['title'])
Хорошо, мы получили названия вакансий. Давайте спарсим теперь каждую ссылку на вакансию и ее описание. Описание находится в теге p с классом overflow. Ссылка находится все в том же элементе a.
Some information about vacancy.
Получаем такой код.
vacancies_info = soup.find_all('p', class_='overflow') for name in vacancies_names: print('https://www.work.ua'+name.a['href']) for info in vacancies_info: print(info.text)
И последний этап парсинга — Сохранение данных.
Давайте соберем всю полученную информацию по страничке и запишем в удобный формат — csv.
import requests from bs4 import BeautifulSoup as bs import pandas as pd URL_TEMPLATE = "https://www.work.ua/ru/jobs-odesa/?page=2" FILE_NAME = "test.csv" def parse(url = URL_TEMPLATE): result_list = r = requests.get(url) soup = bs(r.text, "html.parser") vacancies_names = soup.find_all('h2', class_='add-bottom-sm') vacancies_info = soup.find_all('p', class_='overflow') for name in vacancies_names: result_list['href'].append('https://www.work.ua'+name.a['href']) result_list['title'].append(name.a['title']) for info in vacancies_info: result_list['about'].append(info.text) return result_list df = pd.DataFrame(data=parse()) df.to_csv(FILE_NAME)
После запуска появится файл test.csv — с результатами поиска.
Основы парсинга на Python: от Requests до Selenium
Бывают ситуации, когда нужно автоматизировать сбор и анализ данных из разных источников. Например, если хочется мониторить курс рубля в режиме реального времени. Для решения подобных задач применяют парсинг.
В этой статье кратко рассказываем, как парсить данные веб-сайтов с помощью Python. Пособие подойдет новичкам и продолжающим — сохраняйте статью в закладки и задавайте вопросы в комментариях. Подробности под катом!
Дисклеймер: в статье рассмотрена только основная теория. На практике встречаются нюансы, когда нужно, например, декодировать спаршенные данные, настроить работу программы через xPath или даже задействовать компьютерное зрение. Обо всем этом — в следующих статьях, если тема окажется интересной.
Что такое парсинг?
Парсинг — это процесс сбора, обработки и анализа данных. В качестве их источника может выступать веб-сайт.
Парсить веб-сайты можно несколькими способами — с помощью простых запросов сторонней программы и полноценной эмуляции работы браузера. Рассмотрим первый метод подробнее.
Парсинг с помощью HTTP-запросов
Суть метода в том, чтобы отправить запрос на нужный ресурс и получить в ответ веб-страницу. Ресурсом может быть как простой лендинг, так и полноценная, например, социальная сеть. В общем, все то, что умеет «отдавать» веб-сервер в ответ на HTTP-запросы.
Чтобы сымитировать запрос от реального пользователя, вместе с ним нужно отправить на веб-сервер специальные заголовки — User-Agent, Accept, Accept-Encoding, Accept-Language, Cache-Control и Connection. Их вы можете увидеть, если откроете веб-инспектор своего браузера.
Наиболее подробно о HTTP-запросах, заголовках и их классификации мы рассказали в отдельной статье.
Подготовка заголовков
На самом деле, необязательно отправлять с запросом все заголовки. В большинстве случаев достаточно User-Agent и Accept. Первый заголовок поможет сымитировать, что мы реальный пользователь, который работает из браузера. Второй — укажет, что мы хотим получить от веб-сервера гипертекстовую разметку.
st_accept = "text/html" # говорим веб-серверу, # что хотим получить html # имитируем подключение через браузер Mozilla на macOS st_useragent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15" # формируем хеш заголовков headers =
После формирования заголовков нужно отправить запрос и сохранить страницу из ответа веб-сервера. Это можно сделать с помощью нескольких библиотек: Requests, ScraPy или PySpider.
Requests: получаем страницу по запросу
Для начала работы будет достаточно Requests — он удобнее и проще, чем привычный модуль urllib.
Requests — это библиотека на базе встроенного пакета urllib, которая позволяет легко отправлять различные веб-запросы, а также управлять кукисами и сессиями, авторизацией и автоматической организацией пула соединений.
Для примера попробуем спарсить страницу с курсами в Академии Selectel — это можно сделать за несколько действий:
# импортируем модуль import requests … # отправляем запрос с заголовками по нужному адресу req = requests.get("https://selectel.ru/blog/courses/", headers) # считываем текст HTML-документа src = req.text print(src)
Пример: парсинг страницы с курсами в Академии Selectel.
Сервер вернет html-страницу, который можно прочитать с помощью атрибута text.
… Курсы - Блог компании Селектел …
Супер — гипертекстовую разметку страницы с курсами получили. Но что делать дальше и как извлечь из этого многообразия полезные данные? Для этого нужно применить некий «парсер для выборки данных».
Beautiful Soup: извлекаем данные из HTML
Извлечь полезные данные из полученной html-страницы можно с помощью библиотеки Beautiful Soup.
Beautiful Soup — это, по сути, анализатор и конвертер содержимого html- и xml-документов. С помощью него полученную гипертекстовую разметку можно преобразовать в полноценные объекты, атрибуты которых — теги в html.
# импортируем модуль from bs4 import BeautifulSoup … # инициализируем html-код страницы soup = BeautifulSoup(src, 'lxml') # считываем заголовок страницы title = soup.title.string print(title) # Программа выведет: Курсы - Блог компании Селектел
Готово. У нас получилось спарсить и напечатать заголовок страницы. Где это можно применить — решать только вам. Например, мы в Selecte на базе Requests и Beautiful Soup разработали парсер данных с Хабра. Он помогает собирать и анализировать статистику по выбранным хабраблогам. Подробнее о решении можно почитать в предыдущей статье.
Проблема парсинга с помощью HTTP-запросов
Бывают ситуации, когда с помощью простых веб-запросов не получается спарсить все данные со страницы. Например, если часть контента подгружается с помощью API и JavaScript. Тогда сайт можно спарсить только через эмуляцию работы браузера.
Интересен Python? Мы собрали самые интересные и популярные запросы разработчиков в одном файле! По ссылке — материалы по геймдеву, машинному обучению, программированию микроконтроллеров и графических интерфейсов.
Парсинг с помощью эмулятора
Для эмуляции работы браузера необходимо написать программу, которая будет как человек открывать нужные веб-страницы, взаимодействовать с элементами с помощью курсора, искать и записывать ценные данные. Такой алгоритм можно организовать с помощью библиотеки Selenium.
Настройка рабочего окружения
1. Установите ChromeDriver — именно с ним будет взаимодействовать Selenium. Если вы хотите, чтобы актуальная версия ChromeDriver подтягивалась автоматически, воспользуйтесь webdriver-manager. Далее импортируйте Selenium и необходимые зависимости.
pip3 install selenium
from selenium import webdriver as wd
2. Инициализируйте ChromeDriver. В качестве executable_path укажите путь до установленного драйвера.
browser = wd.Chrome("/usr/bin/chromedriver/")
Теперь попробуем решить задачу: найдем в Академии Selectel статьи о Git.
Задача: работа с динамическим поиском
При переходе на страницу Академии встречает общая лента, в которой собраны материалы для технических специалистов. Они помогают прокачивать навыки и быть в курсе новинок из мира IT.
Но материалов много, а у нас задача — найти все статьи, связанные с Git. Подойдем к парсингу системно и разобьем его на два этапа.
Шаг 1. Планирование
Для начала нужно продумать, с какими элементами должна взаимодействовать наша программа, чтобы найти статьи. Но здесь все просто: в рамках задачи Selenium должен кликнуть на кнопку поиска, ввести поисковый запрос и отобрать полезные статьи.
Теперь скопируем названия классов html-элементов и напишем скрипт!
Шаг 2. Работа с полем ввода
Работа с html-элементами сводится к нескольким пунктам: регистрации объектов и запуску действий, которые будет имитировать Selenium.
. # регистрируем кнопку "Поиск" и имитируем нажатие open_search = browser.find_element_by_class_name("header_search") open_search.click() # регистрируем текстовое поле и имитируем ввод строки "Git" search = browser.find_element_by_class_name("search-modal_input") search.send_keys("Git")
Осталось запустить скрипт и проверить, как он отрабатывает:
Скрипт работает корректно — осталось вывести результат.
Шаг 3. Чтение ссылок и результат
Вне зависимости от того, какая у вас задача, если вы работаете с Requests и Selenium, Beautiful Soup станет серебряной пулей в обоих случаях. С помощью этой библиотеки мы извлечем полезные данные из полученной гипертекстовой разметки.
from bs4 import BeautifulSoup . # ставим на паузу, чтобы страница прогрузилась time.sleep(3) # загружаем страницу и извлекаем ссылки через атрибут rel soup = BeautifulSoup(browser.page_source, 'lxml') all_publications = \ soup.find_all('a', )[1:5] # форматируем результат for article in all_publications: print(article['href'])
Готово — программа работает и выводит ссылки на статьи о Git. При клике по ссылкам открываются соответветствующие страницы в Академии Selectel.
Что такое парсинг и как правильно парсить
Что такое парсинг данных должен знать каждый владелец сайта, планирующий серьёзно развиваться в бизнесе. Это явление настолько распространено, что рано или поздно с парсингом может столкнуться любой. Либо как заказчик данной операции, либо как лицо, владеющее объектом для сбора информации, то есть ресурсом в Интернете. К парсингу в российской бизнес-среде часто наблюдается негативное отношение. По принципу: если это не незаконно, то уж точно аморально. На самом деле из его грамотного и тактичного использования каждая компания может извлечь немало преимуществ.
Digital шагает семимильными шагами. Еще недавно компании и клиенты радовались первым сайтам, а сегодня загрузка страницы за 10 секунд вызывает дикое раздражение. Пройдите тест и узнайте, какие невероятные технологии уже стали реальностью, а какие пока остаются мечтой.
Что такое парсинг
Глагол “to parse” в дословном переводе не означает ничего плохого. Делать грамматический разбор или структурировать — действия полезные и нужные. На языке всех, кто работает с данными на сайтах это слово имеет свой оттенок. Парсить — собирать и систематизировать информацию, размещенную на определенных сайтах, с помощью специальных программ, автоматизирующих процесс. Если вы когда-либо задавались вопросом, что такое парсер сайта, то вот он ответ. Это программные продукты, основной функцией которых является получение необходимых данных, соответствующих заданным параметрам.
Законно ли использовать парсинг
- взлом сайта (то есть получение данных личных кабинетов пользователей и т. п.);
- DDOS-атаки (если на сайт в результате парсинга данных ложится слишком высокая нагрузка);
- заимствование авторского контента (фотографии с копирайтами, уникальные тексты, подлинность которых заверена у нотариуса и т. п. лучше оставить на их законном месте).
Парсинг законен, если он касается сбора информации, находящейся в открытом доступе. То есть всего, что можно и так собрать вручную.
Парсеры просто позволяют ускорить процесс и избежать ошибок из-за человеческого фактора. Поэтому «незаконности» в процесс они не добавляют.
Другое дело, как владелец свежесобранной базы распорядится подобной информацией. Ответственность может наступить именно за последующие действия.
Маркетинг
Читайте также:
Обзор лучших платформ для стриминга мероприятий
Обзор лучших платформ для стриминга мероприятий
Для чего нужен парсинг
Что такое парсить сайт разобрались. Переходим к тому, зачем же это может понадобиться. Здесь открывается широкий простор для действий.
Основная проблема современного Интернета — избыток информации, которую человек не в состоянии систематизировать вручную.
Для чего нужен парсинг | Польза |
Анализа ценовой политики | Чтобы понять среднюю стоимость тех или иных товаров на рынке, удобно использовать данные по конкурентам. Однако если это сотни и тысячи позиций, собрать их вручную оперативно невозможно. |
Отслеживания изменений | Парсинг можно осуществлять на регулярной основе, например, каждую неделю, выявляя на что повысились цены в среднем по рынку и какие новинки появились у конкурентов. |
Наведения порядка на своём сайте | Да, так тоже можно. И даже нужно, если в интернет-магазине несколько тысяч товаров. Найти несуществующие страницы, дубли, неполное описание, отсутствие определенных характеристик или несоответствие данных по складским остаткам тому, что отображается на сайте. С парсером быстрее. |
Наполнения карточек товаров в интернет-магазине | Если сайт новый, счёт обычно идёт даже не на сотни. Вручную на это уйдёт непозволительно количество времени. Часто используют парсинг с иностранных сайтов, переводят полученные тексты автоматизированным методом, после чего получают практически готовые описания. Иногда то же проделывают с русскоязычными сайтами, а полученные тексты изменяют с помощью синонимайзера, но за это можно получить санкции от поисковых систем. |
Получения баз потенциальных клиентов | Существует парсинг, связанный с составлением, например, списка лиц, принимающих решения, в той или иной отрасли и городе. Для этого может применяться личный кабинет на сайтах поиска работы с доступом к актуальным и архивным резюме. Этичность дальнейшего использования подобной базы каждая компания определяет самостоятельно. |
Сквозная аналитика — это тоже своеобразный парсинг, только рекламы и продаж. Система интегрируется с площадками и CRM, а потом автоматически соединяет данные о бюджетах, кликах, сделках и подсчитывает окупаемость каждой кампании. Используйте ее, чтобы не потеряться в большом количестве информации и видеть в отчетах то, что вам действительно нужно. Отчеты Calltouch легко кастомизировать под себя и задачи команды маркетологов.
Сквозная аналитика Calltouch
- Анализируйте воронку продаж от показов до денег в кассе
- Автоматический сбор данных, удобные отчеты и бесплатные интеграции
Достоинства парсинга
Они многочисленны. По сравнению с человеком парсеры могут:
- собирать данные быстрее и в любом режиме, хоть круглосуточно;
- следовать всем заданным параметрам, даже очень тонким;
- избегать ошибок от невнимательности или усталости;
- выполнять регулярную проверку по заданному интервалу (каждую неделю и т. п.);
- представить собранные данные в любом необходимом формате без лишних усилий;
- равномерно распределять нагрузку на сайт, где проходит парсинг (обычно одна страница за 1-2 секунды), чтобы не создавать эффект DDOS-атаки.
Ограничения при парсинге
Есть несколько вариантов ограничений, которые могут затруднить работу парсера:
- По user-agent. Это запрос, в котором программа сообщает сайту о себе. Парсеры банят многие веб-ресурсы. Однако в настройках данные можно изменить на YandexBot или Googlebot и отсылать правильные запросы.
- По robots.txt, в котором прописан запрет для индексации поисковыми роботами Яндекса или Google (ими мы представились сайту выше) определенных страниц. Необходимо задать в настройках программы игнорирование robots.txt.
- По IP-адресу, если с него в течение долгого времени поступают на сайт однотипные запросы. Решение — использовать VPN.
- По капче. Если действия похожи на автоматические, выводится капча. Научить парсеры распознавать конкретные виды достаточно сложно и дорогостояще.
Бесплатно Электронная книга
23 действующих способа сделать свой маркетинг круче, быстрее, эффективнее, чем сейчас Получить бесплатно
Какую информацию можно парсить
Спарсить можно всё, что есть на сайте в открытом доступе. Чаще всего требуются:
- наименования и категории товаров;
- основные характеристики;
- цена;
- информация об акциях и новинках;
- тексты описания товаров для их последующего переделывания «под себя» и т. п.
Изображения с сайтов технически спарсить тоже можно, но, как уже упоминалось выше, если они защищены авторским правом, лучше не нужно. Нельзя собирать с чужих сайтов личные данные их пользователей, которые те вводили в личных кабинетах.
Парсинг часто используется в индустрии e-commerce. Оценить влияние парсинга и его результатов можно в сквозной аналитике для интернет-магазинов. Вам доступны отчеты по любым временным срезам, метрикам и товарам. С помощью этих данных вы узнаете, из каких источников вы получаете добавления в корзины и продажи, и сможете оптимизировать рекламу с опорой на эти данные.
Аналитика для интернет-магазина
- Отслеживайте корзины, звонки, заявки и продажи с них с привязкой к источнику
- Постройте воронку продаж и оптимизируйте маркетинг
Алгоритм работы парсинга
Принцип действия программы зависит от целей. Но схематично он выглядит так:
- Парсер ищет на указанных сайтах или по всему Интернету данные, соответствующие параметрам.
- Информация собирается и производится первоначальная систематизация (её глубина также определяется при настройке);
- Из данных формируется отчёт в формате, соответствующем требуемым критериям. Большинство современных парсеров мультиформатны и могут успешно работать хоть с PDF, хоть с архивами RAR, хоть с TXT.
Способы применения
Основных способов применения парсинга существует два:
- анализировать свой сайт, внося в него необходимые улучшения;
- анализировать сайты конкурентов, заимствуя оттуда основные тенденции и конкретные характеристики товаров.
Обычно оба варианта работают в тесной связке друг с другом. Например, анализ ценовых позиций у конкурентов отталкивается от имеющегося диапазона на собственном сайте, а обнаруженные новинки сопоставляются с собственной товарной базой и т. п.
Предложения от наших партнеров
Online CRM для автосервиса
До 3-х месяцев CRM-системы для автосервисов
Бесплатная часовая сессия с ведущим маркетологом
Хостинг-провайдер и аккредитованный регистратор доменных имён
Скидка до 80% на пакет услуг «Быстрый старт» для создания сайта
Технический аудит вашего сайта за 50 рублей
Агенство по разработке сайтов
Бесплатная помощь в формировании концепции вашего сайта
Сервис мониторинга и оптимизации интернет-рекламы
Три дня бесплатного пользования сервисом
Как парсить данные
Для парсинга данных можно выбрать один из двух форматов:
- воспользоваться специальными программами, которых на рынке существует немало;
- написать их самостоятельно. Для этого может применяться практически любой язык программирования, например, PHP, C++, Python/
Если требуется не вся информация по странице, а только что-то определенное (наименования товаров, характеристики, цена), используется XPath.
XPath – это язык, на котором формируются запросы к XML-документам и их отдельным элементам.
С помощью его команд необходимо определить границы будущего парсинга, то есть задать как парсить данные с сайта — полностью или выборочно.
Чтобы определить XPath конкретного элемента необходимо:
- Перейти на страницу любого товара на анализируемом сайте.
- Выделить цену и щелкнуть по выделению правой кнопкой мыши.
- В открывшемся окне выбрать пункт «Посмотреть код».
- После появления с правой стороны экрана кода, нажать на три точки с левой стороны от выделенной строки.
- В меню выбрать пункт “Copy”, затем “Copy XPath”.
Пример определения XPath элемента на сайте интернет-магазина обуви Holtz
Как спарсить цену
Задаваясь вопросом «Парсинг товаров — что это?», многие подразумевают именно возможность провести ценовую разведку на сайтах конкурентов. Цены парсят чаще всего и действовать необходимо следующим образом. Скопированный в примере выше код ввести в программу-парсер, которая подтянет остальные данные на сайте, соответствующие ему.
Чтобы парсер не ходил по всем страницам и не пытался найти цены в статьях блога, лучше задать диапазон страниц. Для этого необходимо открыть карту XML (добавить “/sitemap.xml ” в адресную строку сайта после названия). Здесь можно найти отсылки к разделам с ценами — обычно это товары ( products) и категории (categories), хотя называться они могут и по-другому.
Маркетинг
Читайте также:
Что такое ценовой сегмент: какими бывают сегменты и для чего они нужны
Что такое ценовой сегмент: какими бывают сегменты и для чего они нужны
Как спарсить характеристики товаров
Здесь всё достаточно просто. Определяются коды XPath для каждого элемента, после чего они вносятся в программу. Так как технические характеристики у одинаковых товаров будут совпадать, можно настроить автозаполнение своего сайта на основе полученной информации.
Как парсить отзывы (с рендерингом)
Процесс сбора отзывов на других сайтах с целью переноса их к себе вначале выглядит похожим образом. Необходимо определить XPath для элемента. Однако далее возникают сложности. Часто дизайн выполнен так, что отзывы появляются на странице именно в тот момент, когда пользователь прокручивает её до нужного места.
В этом случае необходимо изменить настройки программы в пункте Rendering и выбрать JavaScript. Так парсер будет полностью воспроизводить сценарий движения по странице обычного пользователя, а отзывы получит путём выполнения скриншота.
Как парсить структуру сайта
Парсинг структуры — полезное занятие, поскольку помогает узнать, как устроен сайт конкурентов. Для этого необходимо проанализировать хлебные крошки (breadcrumbs):
- Навести курсор на любой элемент breadcrumbs;
- Нажать правую кнопку мыши и повторить действия по копированию XPath.
Далее действие необходимо выполнить для других элементов структуры.
Заключение
Парсинг сайтов — что это? Зло для владельцев сайтов или полезный инструмент для бизнеса. Скорее второе, ведь без кропотливого сбора данных не обходится ни один глубокий анализ конкурентов. Парсинг помогает ускорить процесс, снять с человека нагрузку бесконечной рутинной работы и избежать ошибок, вызванных переутомлением.
Использовать парсинг — абсолютно законно, особенно если знать все сопутствующие нюансы. А возможности этого инструмента практически безграничны. Спарсить можно почти всё — нужно только знать как.
Я хочу стянуть информацию с сайта. Как это сделать?
Допустим, нам нужно получить данные с сайта, сбор которых вручную нецелесообразен или невозможен из-за объёма. В таком случае мы можем автоматизировать процесс, используя инструменты, описанные далее.
Библиотека requests
Python-библиотека для выполнения запросов к серверу и обработки ответов. Фундамент скрипта для парсинга и наше основное оружие. Пользуясь данной библиотекой мы получаем содержимое страницы в виде html для дальнейшего парсинга.
import requests response = requests.get('https://ya.ru') # get-запрос print(response.text) # вывод содержимого страницы payload = 'key1': 'value1', 'key2': 'value2'> response = requests.get('http://httpbin.org/get', params=payload) # запрос с параметрами headers = 'user-agent': 'my-app/0.0.1'> response = requests.get(url, headers=headers) # запрос с определенными html заголовками
API
Application programming interface — программный интерфейс приложения, предоставляемый владельцем веб-приложения для других разработчиков. Отсутствие API, способного удовлетворить наши нужды — первое в чем стоит убедиться прежде чем бросаться анализировать исходный код страницы и писать для нее парсер. Множество популярных сайтов имеет собственное api и документацию, которая объясняет как им пользоваться. Мы можем использовать api таким образом — формируем http-запрос согласно документации, и получаем ответ при помощи requests.
BS4
Beautifulsoup4 — это библиотека для парсинга html и xml документов. Позволяет получить доступ напрямую к содержимому любых тегов в html.
from bs4 import BeautifulSoup soup = BeautifulSoup(raw_html, 'html.parser') print(soup.find("p", class_="some-class").text) # вывод содержимого тэга 'p' классом 'some-class'
Selenium Web Driver
Данные на сайте могут генерироваться динамически при помощи javascript. В таком случае спарсить эти данные силами requests+bs4 не удастся. Дело в том, что bs4 парсит исходный код страницы, не исполняя js. Для исполнения js кода и получения страницы, идентичной той, которую мы видим в браузере, можно использовать selenium web driver — это набор драйверов для различных браузеров, снабжающийся библиотеками для работы с этими драйверами.
А что делать, если там авторизация?
Предварительно авторизоваться, отправив post-запрос и инициировать сессию:
session = requests.Session() data = "login_username":"login", "login_password":"password"> url = "http://site.com/login.php" response = session.post(url, data=data)
А что, если сайт банит за много запросов?
- Установить задержку между запросами:
response = requests.get(url, timeout=(10, 0.01)) # таймаут на соединения, таймаут на чтение (в секундах)
- Притвориться браузером, используя selenium web driver или передав содержимое заголовка user-agent, формируя запрос:
user_agent = ('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) ' 'Gecko/20100101 Firefox/50.0') request = requests.get(url, headers='User-Agent':user_agent>)
- Использовать прокси:
request = requests.get(url, proxies="http":"http://10.10.1.10:3128">)
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.