Как собирать контент из статей в газете USA Today, используя Beautifulsoup в Python 3.7? - PullRequest
0 голосов
/ 04 июня 2019

Я собираю дату, заголовок и контент из газеты USA Today.Я могу получить дату, заголовок и даже контент, но вместе с контентом я получаю некоторые нежелательные вещи.Я не знаю, что мне следует изменить в своем коде, чтобы получить только контент (статью)?

import time
import requests
from bs4 import BeautifulSoup
from bs4.element import Tag

url = 'https://www.usatoday.com/search/?q=cybersecurity&page={}'
pages = 72

for page in range(1, pages+1):
    res = requests.get(url.format(page))
    soup = BeautifulSoup(res.text,"lxml")

    for item in soup.find_all("a", {"class": "gnt_se_a"}, href=True):
        _href = item.get("href")
        try:
            resp = requests.get(_href)
        except Exception as e:
            try:
                resp = requests.get("https://www.usatoday.com"+_href)
            except Exception as e:
                continue

        sauce = BeautifulSoup(resp.text,"lxml")
        dateTag = sauce.find("span",{"class": "asset-metabar-time asset-metabar-item nobyline"})
        titleTag = sauce.find("h1", {"class": "asset-headline speakable-headline"})
        contentTag = sauce.find("div", {"class": "asset-double-wide double-wide p402_premium"})

        date = None
        title = None
        content = None

        if isinstance(dateTag,Tag):
            date = dateTag.get_text().strip()

        if isinstance(titleTag,Tag):
            title = titleTag.get_text().strip()

        if isinstance(contentTag,Tag):
            content = contentTag.get_text().strip()

        print(f'{date}\n {title}\n {content}\n')

        time.sleep(3)

Я ожидаю дату, заголовок и содержание каждой статьи.

1 Ответ

1 голос
/ 04 июня 2019

Я пытаюсь найти контент по

contentTag = sauce.find_all('p',{"class": "p-text"})

и условие для контента

if isinstance(contentTag,list):
    content = []
    for c in contentTag:
        content.append(c.get_text().strip())
    content = ' '.join(content)

Работает.

...