Овладение парсингом веб-страниц: Неизвестные техники, которые вам не расскажут!
Table Of Content
- Преодоление преград аутентификации и упрощение извлечения данных - новый подход к парсингу веб-страниц.
- Мы все были там
- HTML out — JSON in!
- Давайте приступим — найдем правильный запрос
- Понимание параметров
- Создание ваших ключей — трудная часть
- Существует несколько способов раскрыть эту тайну, вот основные методы:
- Полный код:
- Другие советы
- Pandas
- Параллелизм
- Простыми словами
Преодоление преград аутентификации и упрощение извлечения данных - новый подход к парсингу веб-страниц.
Мы все были там
Столкнулись с преградами аутентификации или просматривали огромные HTML-файлы в поисках нужных данных, чтобы в конечном итоге получить запутанную программу, заполненную бессмысленными атрибутами 'div'? Не ищите дальше;
Откройте для себя идеальное решение: В этом кейс-стади мы рассмотрим парсинг веб-страниц с Zillow (сайт недвижимости), продемонстрировав другой подход, основанный на использовании JSON-ответов вместо HTML.
Три темы, о которых вы узнаете к концу этого руководства:
HTML out — JSON in!
Вероятнее всего, веб-сайты с динамическим контентом, такие как недвижимость, сантехники или отели, хранят свои данные в формате, похожем на JSON, в своих базах данных.
Запрашивая эти JSON, вы открываете ворота в мир преимуществ:
Давайте приступим — найдем правильный запрос
- Щелкните правой кнопкой мыши, затем выберите "Инспектировать".
- Перейдите на вкладку "Сеть".
- Найдите уникальную деталь из элемента, например, адрес. - Например, я использовал уникальный адрес "Oak".- Другой вариант - это уникальный номер, например, номер телефона.
- Проверьте, есть ли вкладка "Ответ" JSON, который содержит эту уникальную деталь.
Бинго! Мы нашли наш JSON!
- В найденном запросе перейдите на вкладку "Заголовки".
- Скопируйте URL и заголовки запроса.- _Обратите внимание, что вы не копируете заголовки ответа.
Позже вы узнаете, как автоматически генерировать эти заголовки!
Теперь отправьте этот точный запрос в своем коде. Вы должны получить код ответа 200
(без проблем).
Как видите, это ответ в формате JSON, а не HTML! Удивительно!
Примечание - Это не всегда возможно на каждом сайте и зависит от того, как он построен.
Понимание параметров
URL, который вы скопировали, может выглядеть как запутанный беспорядок, что делает неясным значение этих параметров.
Но вот хорошая новость: сайты, подобные этому, помогут вам с легкостью расшифровать такие URL.
Когда у вас есть такой мощный инструмент под рукой, вы можете свободно настраивать параметры, чтобы они идеально соответствовали вашему запросу. Не стесняйтесь экспериментировать, настраивать и исследовать различия, чтобы раскрыть волшебство обнаружения данных!
Создание ваших ключей — трудная часть
Существует несколько способов раскрыть эту тайну, вот основные методы:
- Отслеживание куки: Найти запрос, который инициирует использование куки, а затем найти запрос, который возвращает эти куки во вкладке ответов или заголовках.
- Очевидный адрес: Найти конкретный URL-адрес одного из запросов, содержащий важный термин, например "GenerateTokens" или "GetCookies".
- Парсинг JavaScript: Исследовать HTML-ответы, чтобы найти JavaScript-функцию, которая содержит ключ к генерации желанных куки.
- Прямой запрос: Использовать простой запрос к доменному имени сайта и наблюдать появление ценных куки.
- Любой другой способ, который вы можете найти, будьте креативны!
В нашем случае с "Zillow" процесс включает комбинацию прямого запроса и парсинга JavaScript. Вы начинаете сделать запрос к адресу домена, а затем переходите по HTML-ответу, чтобы обнаружить конкретный скрипт, содержащий важные куки.
Этот шаг необходим только один раз в начале сессии. Получив их, эти куки остаются действительными для всех последующих запросов.
И теперь мы можем использовать их:
Примечание: В приведенном примере кода мы используем
requests.Session
для обработки куки. При работе с кодом явно объявляйте сеанс, так как куки связаны с ним. Избегайте использованияrequests.get
напрямую, так как это может привести к тому, что сайт не распознает вас, и куки станут бесполезными.
Полный код:
Ниже представлен частичный JSON дома, содержащий цену, количество спален и ванных комнат, площадь, координаты и другую полезную информацию:
{
'price': '$2,499,000',
'beds': 5,
'baths': 4.0,
'area': 3802,
'latLong': {'latitude': 34.14067, 'longitude': -118.55614},
'isFavorite': False,
'isUserClaimingOwner': False,
'isUserConfirmedClaim': False,
'hdpData': {
'homeInfo': {
'zpid': 19949129,
'streetAddress': '3914 Braewood Ct',
'zipcode': '91356',
'city': 'Tarzana',
'state': 'CA',
'latitude': 34.14067,
'longitude': -118.55614,
'price': 2499000.0,
'daysOnZillow': -1,
'rentZestimate': 14829,
'priceChange': -50000,
'taxAssessedValue': 778036.0,
'lotAreaValue': 1.0261,
...
}
},
'detailUrl': '/homedetails/3914-Braewood-Ct-Tarzana-CA-91356/19949129_zpid/',
'address': '3914 Braewood Ct, Tarzana, CA 91356',
'hasAdditionalAttributions': False,
'isFeaturedListing': False,
...
}
Этот JSON содержит множество данных для изучения ваших потребностей в парсинге и анализе.
Другие советы
Pandas
Списки похожих json-объектов легко преобразуются в pandas.DataFrame
:
Параллелизм
Для повышения производительности в парсинге веб-страниц используйте ThreadPoolExecutor
для эффективного многопоточного асинхронного парсинга. Максимизируйте производительность и получайте данные быстрее.
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=32) as exe:
result = list(exe.map(func_that_get_the_json, list_of_urls))
Если вам понравилась эта статья, подпишитесь, чтобы оставаться в курсе новых публикаций! 😁Вы можете найти меня:
Простыми словами
Спасибо, что вы являетесь частью нашего сообщества! Перед тем, как вы уйдете:
- Обязательно поставьте лайк и подпишитесь на автора! 👏
- Вы можете найти еще больше контента на PlainEnglish.io** 🚀**
- Подпишитесь на наш бесплатный еженедельный бюллетень. 🗞️
- Следите за нами в Twitter, LinkedIn, YouTube и Discord**.**