@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)
@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 |