Pull to refresh

Comments 9

В общем, можно придумать удобный для себя способ узнавать о новостях.

Это можно было сделать гораздо проще с помощью RSS — практически любой новостной сайт отдает свою ленту в RSS.

Вот так
for i in range(len(news)):
    if news[i].find('span', class_='time2 time3') is not None:
        new_news.append(news[i].text)

никто не пишет, в пайтоне это делают так:

for news_item in news:
    if news_item.find('span', class_='time2 time3') is not None:
        new_news.append(news_item.text)


А если кроме самого элемента нужно иметь и доступ к индексу, то пользуются enumerate:
for i, news_item in enumerate(news):
    print(i, news_item)

Спасибо, возьму на заметку.
Rss у них, к сожалению, отдает не фильтрованные новости, по этому не мог им пользоваться.

Всмысле нефильтрованные? В RSS те же новости что и в блоке «Лента новостей».
RSS разбирать гораздо проще и надежнее чем парсить html

Да, проблема лишь в том что отличить важные новости, от не важных невозможно.
Использовал парсинг html, ибо там можно отличить такие новости — по красному бекграунду времени поста и легко найти по специфическому классу элемента.

Вся Ваша программа с учетом замечаний располагается ниже этого текста, и она не выполняет поставленную цель — найти только «красные», т.е. с class_=«time3», результат ее работы не будет выдавать всё с классом «time3». На хабре, как я погляжу, есть проверяющие качество комментариев, а вот проверяющих качество самих статей нет. В который раз верю, что то, что описано в статье (код) заработает, а оно не работает. «А включаешь — не работает» (с) Жванецкий.
Пора вводить новую профессию — Храбрый Хабрый unit-tester статей Хабра

from bs4 import BeautifulSoup
import requests
url = 'http://mignews.com/mobile'
page = requests.get(url)
#Проверим подключение:
print(page.status_code)

new_news = []
news = []

#Самое время воспользоваться BeautifulSoup4 и скормить ему наш page, 
#указав в кавычках как он нам поможет 'html.parcer':
soup = BeautifulSoup(page.text, "html.parser")
#Если попросить его показать, что он там сохранил:
#print(soup)

#Теперь воспользуемся функцией поиска в BeautifulSoup4:
news = soup.findAll('a', class_='lenta')

for news_item in news:
    if news_item.find('span', class_='time2 time3') is not None:
        new_news.append(news_item.text)

print(f"{news_item =}")


получил одну строку невырезанного текста:

200
news_item =<a class="lenta" href="/mobile/article.html?id=280221_143704_38808"><span class="time2">14:37</span> Сотни граждан идут в Иерусалим пешком</a>

Не совсем понял как можно достучатся к news_item снаружи цикла…
Но при переборе, при наличии двух классов, мы добавляем в массив new_news…
Распечатав именно new_news:
for data in new_news:
    print(data)
я получил нужный результат:

21:10 COVID-19: самое низкое число тяжелобольных с 30 декабря
20:56 Ганц: под прицелом МУС могут оказаться сотни бойцов ЦАХАЛа
20:27 США ввели санкции против РФ из-за Навального: полный список
17:55 Решение кабинета коронавируса по предвыборным мероприятиям
17:25 В Израиле выявлено три случая заражения нью-йоркским штаммом
16:30 Иран: мы следим за поведением Израиля в регионе
15:01 Либерман: Пресечь террор против фермеров на Юге
12:23 Австрия: в сфере вакцин вместо ЕС будем работать с Израилем
10:39 Врачи Израиля против дискриминации
09:01 Ответ Ирану: Конфликт главы Моссада и начальника Генштаба
08:02 Коронавирус стал причиной повышенной смертности в Израиле
07:12 Правительство приняло решение об ослаблении ограничений
21:45 Реакция политиков на решение БАГАЦ
19:58 Мири Регев представит план открытия Бен-Гурион 7 марта
19:45 Историческое решение БАГАЦ о гиюрах
15:57 Николя Саркози осудили на три года


Писал статью 2 года назад, тогда еще были проблемы с наименованием переменных, возможно и вас запутал… исправлю сейчас.
from bs4 import BeautifulSoup
import requests
url = 'http://samotlor.tv'
page = requests.get(url)

#print(page.status_code)

new_news = []
news = []
news_item = []

soup = BeautifulSoup(page.text, «html.parser»)
#soup2 = str(soup)
#with open('my_file.txt', 'w') as f:
# f.write(soup2)

news = soup.findAll('h4', class_=«entry-title»)
#print(news)

for news_item in news:
if news_item.find('a') is not None:
new_news.append(news_item.text)

#for i in range(len(new_news)):
#print(new_news[i])

with open('my_file3.txt', 'w') as f:
f.write("\n".join(new_news))

f.close()

А как искать теги у которых не указан class?

Sign up to leave a comment.

Articles