Как парсить поисковые запросы в яндексе на python?

Пользователь

от francisco.friesen , в категории: Python , 2 года назад

Как парсить поисковые запросы в яндексе на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от NicolasSsh , 2 года назад

@francisco.friesen  Вы можете использовать библиотеку requests и BeautifulSoup для парсинга поисковых запросов.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import requests
from bs4 import BeautifulSoup

def set_connection(response : str) -> str:
    """
    Функция принимает на вход запрос, который будет парситься
    Возвращает - html
    """

    session = requests.Session() # Создаем сессию

    return session.get(f"https://yandex.ru/search/?text={response}&lr=43", headers={
        "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36",
        "Accept" : "*/*"
    }).text

def parse(html : str) -> list[dict]:
    """
    Функция принимает на вход html, который нужно распарсить
    Возвращает - собранные данные
    """

    with open('index.html', 'w', encoding='utf-8') as file:
        file.write(html)

    elements = list()

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

    for element in soup.find_all('li', {'class' : ['serp-item', 'desktop-card']}):
        elements.append({
            'link' : element.find('a', {'target' : '_blank', 'class' : ['Link', 'link', 'organic__url', 'Link_theme_normal']}).get('href'), # Получаем ссылку
            'title' : element.find('span', {'class' : ['OrganicTitleContentSpan','organic__title']}).get_text(strip = True)
        })
    
    return elements

if __name__ == '__main__':
    html = set_connection(response = "dropcode.ru")
    elements = parse(html = html)

    # Получаем информацию карточек.


Стоит учитывать - что данный способ не будет работать постоянно без прокси (Yandex быстро будет блокировать запросы)

Так что после 2-3 запроса сайт перестанет отдавать информацию. Единственные выходы - замена прокси и парсинг через эмуляцию действий (selenium)

Пользователь

от leila.dickinson , год назад

@francisco.friesen 

Вы можете использовать Yandex.XML API для получения результатов поиска и парсинга их в Python. Для этого необходимо запросить API, передав в запросе параметры, такие как поисковый запрос, количество результатов и т.д. Затем вы можете использовать библиотеку XML, такую как BeautifulSoup, для парсинга ответа и извлечения необходимой информации.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import requests
from bs4 import BeautifulSoup

def get_yandex_results(query):
    response = requests.get(f"https://yandex.com/search/?text={query}")
    soup = BeautifulSoup(response.text, "html.parser")
    results = []
    for link in soup.find_all("a"):
        href = link.get("href")
        title = link.text
        results.append((title, href))
    return results