темный логотип proxyscrape

Соскабливание статических и динамических сайтов с помощью Python и ProxyScrape API

Путеводители, Python, Различия, Май-05-20245 минут чтения

В мире, который становится все более зависимым от данных, способность собирать и анализировать огромные объемы информации может дать компаниям и профессионалам значительное конкурентное преимущество. Веб-скрепинг, процесс извлечения данных с веб-сайтов, является мощным инструментом в арсенале аналитиков данных, веб-разработчиков, цифровых маркетологов и программистов на Python. В этом руководстве вы узнаете о базовых и продвинутых методах веб-скрапинга, о лучших практиках и познакомитесь с ProxyScrape' Web Scraping API как гибким решением для статических и динамических веб-сайтов.

Определение того, является ли веб-сайт статическим или динамическим

Чтобы определить, является ли сайт статическим или динамическим:

  • Просмотрите источник страницы: Щелкните правой кнопкой мыши и выберите "Просмотреть источник страницы". Если все содержимое видно и соответствует тому, что отображается на странице, то, скорее всего, она статична.
  • Используйте инструменты разработчика браузера: Откройте инструменты разработчика, щелкнув правой кнопкой мыши на странице и выбрав "Осмотреть", а затем посмотрите на вкладку "Сеть", пока вы взаимодействуете со страницей. Если в ответ на взаимодействие выполняются новые сетевые запросы, скорее всего, это динамический сайт.
  • Отключите JavaScript: Попробуйте отключить JavaScript в настройках браузера и перезагрузите страницу. Если страница перестала корректно работать или показывает очень мало содержимого, скорее всего, она полагается на JavaScript для получения и отрисовки данных, что указывает на ее динамический характер.

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

Скраппинг статических веб-сайтов с помощью запросов и BeautifulSoup

Для поиска статического содержимого Python предлагает такие надежные библиотеки, как `requests` для выполнения HTTP-запросов и `BeautifulSoup` для разбора HTML- и XML-документов. Вот простой пример:

  • Создание запроса: Используйте `запросы` для получения HTML-содержимого страницы.
  • Парсинг с помощью BeautifulSoup: После того как вы получили содержимое страницы, `BeautifulSoup` может разобрать его и извлечь определенную информацию.
импортировать запросы
из bs4 import BeautifulSoup

response = requests.get('http://example.com')

soup = BeautifulSoup(response.text, 'html.parser')

# Извлеките нужные данные
data = soup.find_all('p')

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

Скраппинг динамических веб-сайтов

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

Существует два способа подхода к динамическому скраппингу сайтов:

  • Первый подход - использование библиотеки автоматизации браузера, например Playwright/Selenium, для получения контента и последующего его разбора с помощью Beautifulsoup.
  • Второй подход похож на игру в детектива на вкладке сети, чтобы определить конечную точку, которую использует веб-сайт для получения данных. Затем вы просто используете модуль Python 'request', чтобы получить эти данные самостоятельно.

Навигация по динамическим веб-сайтам с помощью Playwright

Для соскабливания динамического контента такие инструменты, как Playwright, имитируют взаимодействие реального пользователя с браузером, позволяя вам соскабливать данные, которые загружаются динамически. Вот краткая информация об использовании Playwright с Python:

  • Установка Playwright: установите пакет Playwright и инструмент командной строки.
    - "pip install playwright"
    - "playwright install".
  • Использование Playwright для моделирования взаимодействия: Напишите скрипт, который перемещается по веб-сайту и взаимодействует с ним по мере необходимости, чтобы вызвать загрузку динамического контента
из playwright.sync_api import sync_playwright


if __name__ == '__main__':

   with sync_playwright() as p:

       browser = p.chromium.launch(headless=True)

      page = browser.new_page()

      page.goto('https://www.scrapethissite.com/pages/ajax-javascript/')

      # Моделируем взаимодействие здесь

      page.click('//*[@id="2014"]')

      # Извлечение динамического содержимого

       content = page.inner_text('//*[@id="oscars"]/div/div[5]/div/table')

      print(content)

       browser.close()

Анализ сетевой панели для получения конечных точек API:

  • Откройте инструменты разработчика
    a. Откройте интересующий вас сайт в браузере.
    b. Щелкните правой кнопкой мыши в любом месте страницы и выберите Inspect или нажмите Ctrl+Shift+I (Cmd+Option+I на Mac), чтобы открыть инструменты разработчика.
  • Осмотрите вкладку Сеть
    a. Перейдите на вкладку "Сеть" в инструментах разработчика. На этой вкладке вы увидите все сетевые запросы, которые делает сайт.
    b. Обновите страницу, чтобы начать перехват трафика с самого начала.
  • Фильтр и идентификация AJAX-запросов
    a. Вы можете отфильтровать запросы по типам, например XHR (XMLHttpRequest), которые обычно используются для AJAX-запросов.
    b. Взаимодействуйте со страницей - нажимайте кнопки, заполняйте формы или прокручивайте страницу, чтобы вызвать динамическую загрузку содержимого.
    c. Наблюдайте за сетевыми запросами, которые появляются при выполнении этих действий. Ищите запросы, которые получают интересующие вас данные.
  • Проанализируйте запрос
    a. Щелкните запрос на вкладке "Сеть", который, похоже, извлекает нужные вам данные.
    b. Проверьте раздел "Заголовки", чтобы увидеть метод запроса (GET, POST и т. д.), URL и другие заголовки.
  • Повторите запрос с помощью Python
    a. Используйте информацию из вкладки Headers, чтобы повторить запрос с помощью библиотеки запросов Python. Вот базовый пример того, как это можно сделать:
import requests

# URL from the AJAX request
url = 'https://example.com/api/data'

# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
    'Authorization': 'Bearer token_if_needed'
}

# If it's a POST request, you might also need to send data
data = {
    'example_key': 'example_value'
}

# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)

# To view the response
print(response.json()) 

Использование API для веб-скрапинга в обоих сценариях

Хотя освоение запросов и Playwright или любой другой библиотеки Http-клиента может быть полезным, они требуют времени и усилий для правильной работы. Альтернативный подход заключается в использовании Web Scraping API, который абстрагирует сложность задач по скрапингу. Он не только обрабатывает отправку HTTP-запросов за вас, но и предоставляет помощь в борьбе с запретами, чтобы предотвратить блокировку определенных сайтов.

Представляем ProxyScrape'Web Scraping API

ProxyScrape предлагает API для веб-скрапинга, который упрощает извлечение данных как со статических, так и с динамических веб-сайтов.

Возможности API включают:

  • Легкая интеграция с динамическими и статическими сайтами.
  • Всесторонняя поддержка различных видов веб-скреппинга.
  • Обширный пул IP-адресов
  • Предлагает до 100 000 бесплатных запросов, позволяя пользователям изучить и реализовать весь потенциал API без немедленных инвестиций.
  • Сложная технология защиты от запретов, разработанная для сайтов, известных своими трудностями со скраппингом.
  • Действия позволяют точно контролировать время получения результатов работы сайта. Сюда входит ожидание определенного URL-запроса, ожидание появления элемента на сайте, действия после прокрутки и многое другое. Использование

ProxyScrape Web Scraping API со статическим веб-сайтом:

Это иллюстрация того, как вы можете включить наш API для веб-скреппинга в свои скрипты на Python для статических веб-сайтов или для вызова конечной точки API, которую вы извлекли из панели осмотра в браузере:

import requests
import base64
import json

data = {
    "url": "https://books.toscrape.com/",
    "httpResponseBody": True
}

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)

if response.status_code == 200:
    json_response = response.json()
    if 'browserHtml' in json_response['data']:
        print(json_response['data']['browserHtml'])
    else:
        print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
    print("Error:", response.status_code)

ProxyScrape Web Scraping API с динамическим веб-сайтом:

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

import requests
import json

url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': '<your api key>'  # Make sure to replace <your api key> with your actual API key
}

payload = {
    "url": "https://books.toscrape.com/",
    "browserHtml": True,
    "actions": [
        {
            "action": "waitForRequest",
            "urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
            "urlMatchingOptions": "exact"
        }
    ]
}

response = requests.post(url, headers=headers, json=payload)

# Print the response from the server
print(response.text)  # Prints the response body as text

Лучшие практики в области веб-скрапинга

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

Заключение

  • Независимо от того, занимаетесь ли вы веб-скрейпингом в качестве хобби или включили его в свой профессиональный инструментарий, понимание различий между статическими и динамическими веб-сайтами и умение эффективно скреативить и те, и другие очень важны. Сочетание таких библиотек Python, как Requests и Playwright/Selenium, с Beautifulsoup позволит вам справиться с проблемами веб-скрейпинга.
  • Если ваши скрипты веб-скрапинга распознаются как боты и впоследствии блокируются, или если вы хотите оптимизировать и упростить процесс отправки запросов, обратите внимание на наш Web Scraping API. Он разработан для эффективного решения этих проблем от вашего имени.
  • Помните, что за веб-скреппингом большое будущее, и, придерживаясь лучших практик и используя передовые инструменты, вы сможете открыть мир данных, которые ждут своего часа.

Готовы начать свое приключение в области веб-скрапинга? Зарегистрируйтесь на ProxyScrape сегодня и исследуйте бесконечные возможности Интернета с помощью наших выделенных прокси, прокси для жилых помещений и всеобъемлющего API для веб-скрапинга.