June 3

Как использовать Python для парсинга результатов поиска Baidu

Baidu обрабатывает более 70% поискового трафика в Китае. Это огромная цифра. Если вы хотите получить данные из крупнейшей китайской поисковой системы, вы попали по адресу.

Однако парсинг Baidu — это не прогулка по парку. Поисковик защищается — капчи, блокировка IP, изменяющиеся HTML-структуры. Потребуются умные инструменты и правильный подход.

В этом руководстве мы покажем, как с помощью Python и Swiftproxy API спарсить органические результаты Baidu. Готовы приступить к коду? Поехали!

Что отображается на странице результатов поиска Baidu

Страница результатов поиска Baidu (SERP) выглядит знакомо, если вы пользовались Google или Bing. Но есть свои особенности:

  • Органические результаты: натуральные ссылки — сайты, отсортированные по релевантности.
  • Платные результаты: объявления с отметкой «реклама», обычно сверху.
  • Похожие запросы: находятся внизу и предлагают дополнительные варианты для поиска.

Ваша цель — органические результаты. Здесь самая ценная информация.

Сложности парсинга Baidu

Защита Baidu реальна. Динамические HTML-макеты постоянно меняются. IP и user-agent быстро блокируются. Капчи появляются как препятствия.

Это значит:

  • Скрипт нужно регулярно обновлять.
  • IP-адреса должны меняться (ротация) для обхода блокировок.
  • Для динамического контента нужен аккуратный парсинг.

Без готового инструмента парсинг Baidu — это игра в кошки-мышки.

Законность парсинга Baidu

Парсинг общедоступных данных обычно законен, но с оговорками:

  • Не заходите под аккаунты и не собирайте личные данные.
  • Избегайте контента с авторскими правами.
  • Соблюдайте условия использования сайта.
  • В сомнительных случаях консультируйтесь с юристом.

Лучше перестраховаться.

Как спарсить результаты Baidu с Python и Swiftproxy API

Шаги:

Подготовьте Python-окружение

Установите библиотеки:

pip install requests bs4 pandas

Настройте API-эндпоинт:

url = 'https://realtime.swiftproxy.net/v1/queries'
auth = ('your_api_username', 'your_api_password')

Подготовьте запрос:

payload = {
   'source': 'universal',
   'url': 'https://www.baidu.com/s?ie=utf-8&wd=nike&rn=50',
   'geo_location': 'United States',
}

Отправьте POST-запрос:

response = requests.post(url, json=payload, auth=auth, timeout=180)
response.raise_for_status()
json_data = response.json()
if not json_data["results"]:
    print("No results found.")
    return

Спарсите HTML-результаты с помощью BeautifulSoup:

from bs4 import BeautifulSoup

def parse_baidu_html_results(html_content: str) -> list[dict]:
    soup = BeautifulSoup(html_content, "html.parser")
    results = []
    for block in soup.select("div.c-container[id]"):
        title_tag = (
            block.select_one("h3.t a")
            or block.select_one("h3.c-title-en a")
            or block.select_one("div.c-title a")
        )
        if not title_tag:
            continue
        title = title_tag.get_text(strip=True)
        url = title_tag.get("href")
        if title and url:
            results.append({"title": title, "url": url})
    return results

Сохраните результаты в CSV-файл:

import pandas as pd

def store_to_csv(data: list[dict]):
    df = pd.DataFrame(data)
    df.to_csv("baidu_results.csv")

Полный пример скрипта:

def main():
    payload = {
        "source": "universal",
        "url": "https://www.baidu.com/s?ie=utf-8&wd=nike&rn=50",
        "geo_location": "United States",
    }
    url = "https://realtime.swiftproxy.net/v1/queries"
    auth = ("your_api_username", "your_api_password")

    response = requests.post(url, json=payload, auth=auth, timeout=180)
    response.raise_for_status()

    json_data = response.json()
    if not json_data["results"]:
        print("No results found.")
        return

    html_content = json_data["results"][0]["content"]
    parsed_data = parse_baidu_html_results(html_content)
    store_to_csv(parsed_data)

if __name__ == "__main__":
    main()

Запустите этот скрипт — и у вас будет файл baidu_results.csv с результатами поиска.

Преимущества резидентских прокси при парсинге Baidu

API упрощает задачу, но иногда хочется делать запросы самостоятельно.

Здесь помогут резидентские прокси — они направляют трафик через реальные IP с устройств по всему миру, делая ваш скрипт «человечным».

Пример с прокси:

proxy_entry = "http://customer-<username>:<password>@pr.swiftproxy.net:10000"
proxies = {
    "http": proxy_entry,
    "https": proxy_entry,
}
response = requests.get("https://www.baidu.com/s?ie=utf-8&wd=nike&rn=50", proxies=proxies, timeout=180)
html_content = response.text
parsed_data = parse_baidu_html_results(html_content)
store_to_csv(parsed_data)

Парсинг и сохранение остаются прежними — меняется только способ получения страницы.

Итог

Парсинг Baidu — задача не из простых, но выполнимая. Главное — правильный подход. Хотите быстро и масштабно? Используйте API. Нужна гибкость? Прокси — ваш выбор. И всегда парсите аккуратно.

Ваш путь к данным Baidu начинается здесь — с Python, прокси и немного терпения вы получите доступ к одной из крупнейших поисковых систем мира.