Цикл 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[]
из этих индексов без необходимости писать first
second
third
и т.п.
Редактировать: содержание 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