Цикл bs4.element.tag

Я пытаюсь разобрать RSS-ленту для новостного сайта и вытащить дату публикации, заголовок, описание и ссылку на саму статью. Пока что с этими строками кода:

with open('text.txt', 'r', encoding='utf-8') as f:
    soup = bs4.BeautifulSoup(f, 'lxml')
    all_item_tags = soup.find_all('item')
    first = all_item_tags[0]
    second = all_item_tags[1]
    print(first.contents[9].contents[0], first.contents[1].contents[0], first.contents[4], first.contents[5].contents[0])
    print(second.contents[9].contents[0], second.contents[1].contents[0], second.contents[4], second.contents[5].contents[0])

Я получаю эту информацию, но у меня возникают проблемы с выяснением, как зациклить ее, чтобы захватить все показатели all_item_tags а затем .contents[].contents[] из этих индексов без необходимости писать firstsecondthird и т.п.

Редактировать: содержание text.txt - http://www.dailymail.co.uk/home/index.rss

1 ответ

Канал уже представлен в виде RSS-документа. Вместо того, чтобы использовать beautifulsoup для его анализа, избавьте себя от хлопот по удалению страницы и используйте вместо этого feedparser. Он анализирует RSS и Atom и многое делает для нормализации контента за вас. Это было спасением при создании корпуса новостных статей при изучении обработки естественного языка.

Установить feedparser

pip install feedparser

Разобрать фид

import feedparser

dailymail = feedparser.parse('http://www.dailymail.co.uk/home/index.rss')
for entry in dailymail.feed.entries:
  title = item.get('title', 'No title')
  description = item.get('summary', 'No descrition.')

Из раздела комментариев:

Как насчет for item_tag in all_item_tags? - t.m.adam

Другие вопросы по тегам