Как использовать 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
Шаги:
pip install requests bs4 pandas
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', }
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, прокси и немного терпения вы получите доступ к одной из крупнейших поисковых систем мира.