LINUX.ORG.RU

Python. Получить региональные новости с главной страницы Яндекса

 , ,


1

1

Хочу в консоль печатать новости с главной страницы Яндекса: общероссийские и региональные.

Написал скрипт:


#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
r=requests.get("http://yandex.ru")

soup=BeautifulSoup(r.text, "html.parser")
news=soup.find_all(class_="news__item-content")

print("Russian news:")
for current_news in news:
    print(current_news.text)

Российские печатает без проблем. Но региональных нет…

Проблема в том, что id=«news_panel_region», где содержатся региональные новости, появляется только после нажатия кнопки на имя города на главной странице. В остальном новости хранятся аналогично общероссийским. При этом, судя по разделу «Network», никаких дополнительных веб-запросов не отправляется при клике на имя города. Какой-то JS выполняется может?

Как тут лучше решить проблему и решаемая ли она?

★★★

Ох уж эти свидетели скриптописания и DOM-а. Открываешь исходник главной страницы, нажимаешь Ctrl+F, начинаешь вбивать заголовок какой-нить региональной новости. Дальше сам разберёшься?

edit: если что, я заранее не знал где оно будет, оно могло оказаться и в каких-то из запросов, делающихся после запроса главной, но до клика, но тут всё оказалось совсем просто; а ещё оно могло быть закодировано какой-нить json-гадостью вида \u1234\u3214 но тут опять же обошлось без этого

firkax ★★★ ()
Последнее исправление: firkax (всего исправлений: 2)

для веба отдельный раздел форума кстати есть

firkax ★★★ ()

ну так нажми эту кнопку
например с помощью селениума

kto_tama ★★★★★ ()

Посмотри, нет ли у них API. Парсить что-то часто меняющееся типа яндекса — война с мельницами.

anonymous ()

Простой способ: делаешь запрос на получение страницы

import requests
rb = requests.get("https://yandex.ru/news/region/<имя региона>") 
# например moscow

а дальше можно мусор почистить и вычленить готовые новости

import re
re.findall("\"title\":[^,]*", rb.text)

Способ костыльноват и его стоит допилить убрать лишнее, вернуть к жизни внутренние запятые, но в целом идею думаю передал:)

AKonia ★★ ()
Последнее исправление: AKonia (всего исправлений: 4)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.