поиск текстов по Яндекс. Дзен

Чтобы сделать поиск текстов и фраз по Яндекс.Дзен (dzen.ru),
можно использовать несколько способов:

Поиск через сам Яндекс.Дзен
Зайдите на сайт dzen.ru.

В верхней части страницы обычно есть строка поиска. Введите интересующий вас текст или фразу и нажмите Enter.
Результаты выдачи покажут статьи и материалы, связанные с вашим запросом.
Поиск через Яндекс с ограничением по сайту
Если на самом Дзен поиск неудобен или отсутствует, можно воспользоваться поиском Яндекса с оператором site:. Например, введите в строку поиска Яндекса:

site: dzen.ru ваша фраза или текст
Это ограничит поиск только страницами с домена dzen.ru, что позволит найти нужные статьи и материалы.

Использование сторонних сервисов и расширений
Существуют расширения для браузеров и сторонние сервисы, которые позволяют искать по контенту различных платформ, включая Дзен. Однако стоит быть осторожным с безопасностью таких инструментов.

Если у вас есть конкретная задача или пример запроса — могу помочь составить эффективный поисковый запрос.


-> Нужна программа  поиска  на питоне


Понял, вам нужна программа на Python для поиска текстов и фраз по сайту dzen.ru. Один из простых способов — использовать библиотеку requests для загрузки страниц и BeautifulSoup для парсинга, а также поиск по тексту.

Однако у Дзена нет открытого API для поиска, и сайт динамический — контент часто подгружается через JavaScript, поэтому простой запрос страницы может не дать нужного результата. В этом случае можно использовать поиск через Яндекс с оператором site:dzen.ru и парсить результаты поиска.

Ниже пример программы на Python, которая выполняет поиск через Яндекс с оператором site: dzen.ru и выводит заголовки и ссылки найденных материалов:


import requests
from bs4 import BeautifulSoup
import urllib.parse

def yandex_search_dzen(query, num_results=10):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    }
    # Формируем поисковый запрос с ограничением по сайту dzen.ru
    search_query = f"site:dzen.ru {query}"
    url =
    response = requests.get(url, headers=headers)
    response.raise_for_status()

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

    results = []
    # На странице поиска Яндекса результаты обычно в блоках с классом "serp-item"
    for item in soup.select('.serp-item'):
        # Заголовок
        title_tag = item.select_one('h2 a')
        if not title_tag:
            continue
        title = title_tag.get_text(strip=True)
        link = title_tag['href']
        results.append({'title': title, 'link': link})

    return results

if __name__ == "__main__":
    query = input("Введите фразу для поиска по dzen.ru: ")
    results = yandex_search_dzen(query)

    if results:
        print(f"Найдено {len(results)} результатов:")
        for i, res in enumerate(results, 1):
            print(f"{i}. {res['title']}\n   {res['link']}")
    else:
        print("Результаты не найдены.")




Как это работает:

Программа формирует поисковый запрос с site: dzen.ru и вашей фразой.
Отправляет запрос к Яндексу.
Парсит HTML страницы результатов поиска.
Извлекает заголовки и ссылки на статьи с Дзена.
Выводит их в консоль.

Важно:
Частые запросы могут привести к блокировке IP.
Структура страницы поиска Яндекса может измениться, тогда парсер нужно будет обновить.

Использование официальных API (если появятся) предпочтительнее.
Если хотите, могу помочь сделать более сложный парсер или использовать Selenium для загрузки динамического контента.


   =>



Понял, сделаем более сложный парсер для поиска по dzen.ru через Яндекс,
используя Selenium.
Это позволит корректно обработать динамический контент и JavaScript.



вот пример программы на Python с использованием Selenium и Chrome WebDriver:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

def yandex_search_dzen_selenium(query, max_results=10):
    options = Options()
    options.add_argument('--headless')  # Запуск браузера в фоновом режиме
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')

    driver = webdriver.Chrome(options=options)
    try:
        search_query = f"site:dzen.ru {query}"
        url = f"https://yandex.ru/search/?text={search_query}"

        driver.get(url)
        time.sleep(3)  # Ждем загрузки страницы

        results = []

        # Поиск результатов на странице
        # Обычно результаты в блоках с классом 'serp-item'
        items = driver.find_elements(By.CSS_SELECTOR, '.serp-item')
        for item in items:
            try:
                title_elem = item.find_element(By.CSS_SELECTOR, 'h2 a')
                title = title_elem.text
                link = title_elem.get_attribute('href')
                results.append({'title': title, 'link': link})
                if len(results) >= max_results:
                break
            except:
                continue

        return results

    finally:
        driver.quit()

if __name__ == "__main__":
    query = input("Введите фразу для поиска по dzen.ru: ")
    results = yandex_search_dzen_selenium(query)

    if results:
        print(f"Найдено {len(results)} результатов:")
        for i, res in enumerate(results, 1):
            print(f"{i}. {res['title']}\n   {res['link']}")
    else:
        print("Результаты не найдены.")





Как использовать:
Установите Selenium:
pip install selenium

Скачайте ChromeDriver, подходящий под вашу версию Chrome, и добавьте его в PATH или укажите путь в коде.
Запустите скрипт.

Пояснения:
Используем headless режим, чтобы браузер не открывался визуально.
Ждем загрузки страницы 3 секунды, можно увеличить при необходимости.
Парсим блоки результатов serp-item, извлекаем заголовок и ссылку.
Ограничиваем количество результатов.
Если нужно, могу помочь адаптировать скрипт под Firefox (geckodriver) или добавить сохранение результатов в файл.




Вот полный пример Python-скрипта с использованием Selenium для поиска по сайту dzen.ru через Яндекс и вывода заголовков и ссылок найденных статей.


код программы:

```python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

def yandex_search_dzen_selenium(query, max_results=10):
    options = Options()
    options.add_argument('--headless')  # Запуск браузера без окна
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')

    driver = webdriver.Chrome(options=options)  # Убедитесь, что chromedriver в PATH
    try:
        search_query = f"site:dzen.ru {query}"
        url = f"https://yandex.ru/search/?text={search_query}"

        driver.get(url)
        time.sleep(3)  # Ждём загрузки страницы (можно увеличить при медленном интернете)

        results = []

        # На странице результаты обычно в блоках с классом 'serp-item'
        items = driver.find_elements(By.CSS_SELECTOR, '.serp-item')
        for item in items:
            try:
                title_elem = item.find_element(By.CSS_SELECTOR, 'h2 a')
                title = title_elem.text
                link = title_elem.get_attribute('href')
                results.append({'title': title, 'link': link})
                if len(results) >= max_results:
                break
            except Exception:
                continue

        return results

    finally:
        driver.quit()

if __name__ == "__main__":
    query = input("Введите фразу для поиска по dzen.ru: ")
    results = yandex_search_dzen_selenium(query)

    if results:
        print(f"Найдено {len(results)} результатов:")
        for i, res in enumerate(results, 1):
            print(f"{i}. {res['title']}\n   {res['link']}")
    else:
        print("Результаты не найдены.")
```


 Как запустить:

 Установите Selenium:

```bash
pip install selenium
```

 Скачайте [ChromeDriver](https://sites.google.com/chromium.org/driver/) под вашу версию Chrome и убедитесь, что он доступен в PATH (или укажите путь в `webdriver.Chrome(executable_path='путь_к_chromedriver', options=options)`).

 Запустите скрипт:

```bash
python ваш_скрипт.py
```

 Введите поисковую фразу, например:

```
новости технологии
```

 Получите список заголовков и ссылок на статьи с dzen.ru.

 Время ожидания загрузки страницы (`time.sleep(3)`) можно увеличить, если интернет медленный или страница долго грузится.

 Структура страницы Яндекса может измениться, тогда селекторы нужно будет обновить.
 Для более стабильной работы можно использовать WebDriverWait и ожидания по элементам,
если хотите — помогу добавить это.



 **



Да, конечно - можно расширить скрипт так, чтобы он после получения ссылок переходил на каждую статью dzen.ru и пытался извлечь из неё часть текста (например, первые несколько абзацев), а затем выводил этот текст вместе с ссылкой.

Ниже пример, как это можно сделать с Selenium. Скрипт:

- Выполняет поиск по Яндексу с `site:dzen.ru` и вашей фразой. 
- Парсит первые N результатов. 
- Для каждого результата переходит по ссылке, ждёт загрузки и пытается извлечь текст статьи (первые 2-3 абзаца). 
- Выводит текст и ссылку.





```python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

def get_driver():
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(options=options)
    return driver

def yandex_search_dzen_selenium(query, max_results=5):
    driver = get_driver()
    try:
        search_query = f"site:dzen.ru {query}"
        url = f"https://yandex.ru/search/?text={search_query}"

        driver.get(url)
        # Ждём, пока появятся результаты поиска
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.serp-item'))
        )

        results = []
        items = driver.find_elements(By.CSS_SELECTOR, '.serp-item')
        for item in items:
            try:
                title_elem = item.find_element(By.CSS_SELECTOR, 'h2 a')
                title = title_elem.text
                link = title_elem.get_attribute('href')
                results.append({'title': title, 'link': link})
                if len(results) >= max_results:
                break
            except Exception:
                continue

        return results
    finally:
        driver.quit()

def extract_text_from_dzen(url):
    driver = get_driver()
    try:
        driver.get(url)
        # Ждём, пока загрузится основной контент статьи
        # Обычно у Дзена статьи в div с атрибутом data-article или с классами, например, 'article' или 'content'
        # Здесь пример универсальный — ищем первые абзацы <p> внутри основного контейнера

        try:
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.TAG_NAME, 'article'))
            )
            container = driver.find_element(By.TAG_NAME, 'article')
        except TimeoutException:
            # Если article не найден, пытаемся найти div с текстом
            try:
                container = driver.find_element(By.CSS_SELECTOR, 'div[data-article]')
            except NoSuchElementException:
                # Если и так не нашли, возьмём body
                container = driver.find_element(By.TAG_NAME, 'body')

        paragraphs = container.find_elements(By.TAG_NAME, 'p')
        text_parts = []
        for p in paragraphs[:5]:  # первые 5 абзацев
            text = p.text.strip()
            if text:
                text_parts.append(text)

        return '\n\n'.join(text_parts)

    finally:
        driver.quit()

if __name__ == "__main__":
    query = input("Введите фразу для поиска по dzen.ru: ")
    results = yandex_search_dzen_selenium(query, max_results=3)

    if not results:
        print("Результаты не найдены.")
    else:
        for i, res in enumerate(results, 1):
            print(f"\n{i}. {res['title']}\n{res['link']}\n")
            print("Текст статьи (первые абзацы):")
            try:
                text = extract_text_from_dzen(res['link'])
                print(text if text else "[Текст не найден]")
            except Exception as e:
                print(f"[Ошибка при получении текста: {e}]")
```



 Что делает  данный скрипт:

 Ищет статьи на dzen.ru через Яндекс. 
 Берёт первые 3 результата (можно изменить параметр `max_results`). 
 Для каждой ссылки открывает страницу и пытается получить первые абзацы текста. 
 Выводит заголовок, ссылку и часть текста.



 Важные моменты:

- Структура страниц Дзена может отличаться, иногда текст может быть внутри разных контейнеров — возможно, потребуется адаптация селекторов. 
- Загрузка каждой статьи занимает время, так что на несколько ссылок понадобится время. 
- Для стабильности можно добавить более точные ожидания элементов (WebDriverWait). 
- Если хотите, могу помочь сделать сохранение результатов в файл (txt или json).

Если хотите — помогу с доработками этого кода




 Понял - тогда сделаем более стабильный и аккуратный вариант с подробными ожиданиями, обработкой исключений и комментариями. Добавлю:

 WebDriverWait вместо простого sleep. 
 Универсальный поиск текста статьи с разными вариантами селекторов. 
 Логирование прогресса. 
 Возможность задать число результатов. 
 Вывод текста и ссылки аккуратно.



  **



```python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import sys

def get_driver():
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    # Опционально: добавьте user-agent, чтобы снизить вероятность блокировки
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                "AppleWebKit/537.36 (KHTML, like Gecko) "
                "Chrome/114.0.0.0 Safari/537.36")
    driver = webdriver.Chrome(options=options)
    driver.set_page_load_timeout(20)
    return driver

def yandex_search_dzen_selenium(query, max_results=5):
    driver = get_driver()
    results = []
    try:
        search_query = f"site:dzen.ru {query}"
        url = f"https://yandex.ru/search/?text={search_query}"

        print(f"Открываю поиск: {url}")
        driver.get(url)

        # Ждём появления результатов
        WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.serp-item'))
        )

        items = driver.find_elements(By.CSS_SELECTOR, '.serp-item')
        for item in items:
            try:
                title_elem = item.find_element(By.CSS_SELECTOR, 'h2 a')
                title = title_elem.text.strip()
                link = title_elem.get_attribute('href')
                if title and link:
                results.append({'title': title, 'link': link})
                print(f"Найдено: {title}")
                if len(results) >= max_results:
                break
            except Exception:
                continue

        if not results:
            print("Не удалось найти результаты.")
        return results

    except TimeoutException:
        print("Превышено время ожидания загрузки результатов поиска.")
        return []
    finally:
        driver.quit()

def extract_text_from_dzen(url):
    driver = get_driver()
    try:
        print(f"Загружаю статью: {url}")
        driver.get(url)

        wait = WebDriverWait(driver, 15)

        # Попробуем найти основной контейнер статьи
        container = None
        selectors = [
            'article',                # стандартный тег article
            'div[data-article]',        # часто встречается на дзен
            'div[class*="article"]',   # div с классом, содержащим article
            'div[class*="content"]',   # div с классом, содержащим content
            'main'                # fallback - основной блок main
        ]
        for sel in selectors:
            try:
                container = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, sel)))
                if container:
                break
            except TimeoutException:
                continue

        if not container:
            print("Не удалось найти контейнер с текстом статьи.")
            return ""

        # Получаем первые абзацы <p> внутри контейнера
        paragraphs = container.find_elements(By.TAG_NAME, 'p')
        text_parts = []
        for p in paragraphs:
            txt = p.text.strip()
            if txt:
                text_parts.append(txt)
            if len(text_parts) >= 5:  # максимум 5 абзацев
                break

        if not text_parts:
            print("В статье не найден текст в абзацах.")
            return ""

        return "\n\n".join(text_parts)

    except TimeoutException:
        print("Превышено время ожидания загрузки статьи.")
        return ""
    except Exception as e:
        print(f"Ошибка при получении текста статьи: {e}")
        return ""
    finally:
        driver.quit()

def main():
    query = input("Введите фразу для поиска по dzen.ru: ").strip()
    if not query:
        print("Пустой запрос. Выход.")
        sys.exit(1)

    max_results = 3  # Можно изменить или запросить у пользователя

    results = yandex_search_dzen_selenium(query, max_results=max_results)

    if not results:
        print("Результаты не найдены.")
        return

    print(f"\nНайдено {len(results)} результатов. Получаем тексты статей...\n")

    for i, res in enumerate(results, 1):
        print(f"{i}. {res['title']}\nСсылка: {res['link']}\n")
        text = extract_text_from_dzen(res['link'])
        if text:
            print("Текст статьи (первые абзацы):\n")
            print(text)
        else:
            print("[Текст статьи не найден или не удалось загрузить]")
        print("\n" + "-"*80 + "\n")

if __name__ == "__main__":
    main()
```




 Что улучшено:

 Используется WebDriverWait для ожидания элементов, вместо time.sleep. 
 Несколько вариантов селекторов для поиска статьи, чтобы покрыть разные шаблоны страниц Дзена. 
 Добавлен user-agent, чтобы браузер выглядел как обычный пользователь. 
 Обработка ошибок и таймаутов с информативными сообщениями. 
 Выводит прогресс работы в консоль. 
 Лимит результатов можно легко менять. 
 Аккуратное форматирование вывода.



 Рекомендации:

 Убедитесь, что версия ChromeDriver совпадает с вашим браузером Chrome. 
 При больших объёмах можно добавить кэширование или сохранение результатов в файл. 
 Если хотите, могу помочь с этим.
Если нужна помощь с установкой или запуском — то скажите


Рецензии