Проблемы с получением контента статьи при отказе от новостного сайта с использованием красивого супа - PullRequest
0 голосов
/ 13 июля 2020

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

import requests
from bs4 import BeautifulSoup as bs

url='https://www.business-standard.com/rss/economy-policy-102.rss'
resp= requests.get(url)
soup = bs(resp.content,features='xml')
items= soup.findAll('item')
news_items = []

for item in items:
    news_item = {}
    news_item['title'] = item.title.text
    news_item['description'] = item.description.text
    news_item['link'] = item.link.text
    news_item['pubDate'] = item.pubDate.text
    news_items.append(news_item)

import pandas as pd
df = pd.DataFrame(news_items,columns=['title','description','link','pubDate'])
df['description'][0]

Output obtained - 'The re-import in the extended period would be without payment of basic customs duty and integrated goods and services tax'

Как видно выше, я не получаю полное содержание статьи. Какие изменения необходимо внести?

1 Ответ

0 голосов
/ 13 июля 2020

RSS-канал не содержит полного текста статей, вам нужно открыть ссылку и получить статью оттуда.

Например:

import requests
from bs4 import BeautifulSoup


url='https://www.business-standard.com/rss/economy-policy-102.rss'
soup = BeautifulSoup(requests.get(url).content, 'xml')

news_items = []
for item in soup.findAll('item'):
    news_item = {}
    news_item['title'] = item.title.text
    news_item['excerpt'] = item.description.text

    print(item.link.text)
    s = BeautifulSoup(requests.get(item.link.text).content, 'html.parser')

    news_item['text'] = s.select_one('.p-content').get_text(strip=True, separator=' ')
    news_item['link'] = item.link.text
    news_item['pubDate'] = item.pubDate.text
    news_items.append(news_item)

import pandas as pd
df = pd.DataFrame(news_items)
df.to_csv('data.csv')

Создает data.csv (скриншот из LibreOffice):

введите описание изображения здесь

...