поиск текстов по Яндекс. Дзен
можно использовать несколько способов:
Поиск через сам Яндекс.Дзен
Зайдите на сайт 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.
При больших объёмах можно добавить кэширование или сохранение результатов в файл.
Если хотите, могу помочь с этим.
Если нужна помощь с установкой или запуском — то скажите
Свидетельство о публикации №125070802358