Python Web Scraper - Попытка получить программу для очистки данных в одном указанном c месте, а не на всей странице - PullRequest
1 голос
/ 17 марта 2020

Я просматривал веб-страницы, читал и смотрел несколько руководств в Интернете о том, как решить мою проблему, но я застрял и надеюсь получить некоторую информацию. Я пытаюсь создать веб-скребок, который очистит раздел сделок M & A от Reuters и успешно сумел написать программу, которая может очистить заголовок, сводку, дату и ссылку для статьи. Однако проблема, которую я пытаюсь решить, заключается в том, что я хочу, чтобы программа вычищала только заголовки / статьи со сводкой, которые расположены непосредственно под столбцом «Слияния и поглощения». Текущая программа очищает ВСЕ заголовки, которые она видит, помеченные тегом «article» и атрибутом / классом «story», и, таким образом, в результате получается не только удаление заголовков из столбца «Слияния и поглощения», но и столбца «Новости рынка». ,

Я продолжал получать ошибки атрибутов, как только бот начал собирать заголовки из столбца Market News, так как столбцы рыночных новостей не содержат никаких сводок и, следовательно, никакого текста для извлечения, что приводит к завершению моего кода. Я попытался исправить это с помощью пути try / кроме logi c, думая, что он не будет тянуть заголовки из столбца Market News, однако код продолжал тянуть заголовки.

Я пытался написать новый В строке кода, которая сообщает программе вместо поиска всех тегов со статьями, ищите все теги с, думая, что, если бы я дал боту более прямой путь, по которому он следовал, он бы вычеркнул статьи, идущие сверху вниз. Однако это не удалось, и теперь у меня просто болит голова. Спасибо всем заранее!

Вот мой код ниже:

from bs4 import BeautifulSoup
import requests

website = 'https://www.reuters.com/finance/deals/mergers'
source = requests.get(website).text
soup = BeautifulSoup(source, 'lxml')

for article in soup.find_all('article'):
    headline = article.div.a.h3.text.strip()
    #threw in strip() to fix the issue of a bunch of space being printed before the headline title.
    print(headline+ "\n")

    date = article.find("span",class_ = 'timestamp').text
    print(date)

    try: #Put in Try/Except logic to keep the code going
        summary = article.find("div", class_="story-content").p.text
        print(summary + "\n")
        link = article.find('div', class_='story-content').a['href']
        #this bit [href] is the syntax needed for me to pull out the URL from the html code
        origin = "https://www.reuters.com/finance/deals/mergers"
        print(origin + link + "\n")
    except Exception as e:
        summary = None
        link = None

    #This section here is another part I'm working on to get the scraper to go to
    #the next page and continue scraping for headlines, dates, summaries, and links
    next_page = soup.find('a', class_='control-nav-next')["href"]
    source = requests.get(website + next_page).text
    soup = BeautifulSoup(source, 'lxml')

1 Ответ

0 голосов
/ 17 марта 2020

Измените только эту строку:

for article in soup.select('div[class="column1 col col-10"] article'):

С этим синтаксисом .select () находит все теги article ниже <div class="column1 col col-10">, которые содержат интересующие вас заголовки, а не остальные.

Вот документация: https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html?highlight=select#css -селекторы

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