Как я могу извлечь только определенные части тела статьи? - PullRequest
0 голосов
/ 20 февраля 2019

В моем text_scraper(page_soup) я понял, что к концу я получаю неуместную информацию, которая вообще не имеет отношения к моей статье.Какой общий подход позволит избавиться от ненужной информации?

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import re


# Initializing our dictionary
dictionary = {}

# Initializing our url key
url_key = 'url'
dictionary.setdefault(url_key, [])

# Initializing our text key
text_key = 'text'
dictionary.setdefault(text_key, [])

def text_scraper(page_soup):
    text_body = ''
    # Returns the text of p tags, we stopped it at -5 bc that's when the text is irrelevant to the article
    for p in page_soup.find_all('p'):
        text_body += p.text
    return(text_body)

def article_scraper(url):
    # Opening up the connection, grabbing the page
    uClient = uReq(url)
    page_html = uClient.read()
    uClient.close()

    # HTML parsing
    page_soup = soup(page_html, "html.parser")

    dictionary['url'].append(url)
    dictionary['text'] = text_scraper(page_soup)
    return dictionary

articles_zero = 'https://www.sfchronicle.com/news/bayarea/heatherknight/article/Special-education-teacher-a-prime-example-of-13560483.php'
article = article_scraper(articles_zero)
article

1 Ответ

0 голосов
/ 20 февраля 2019

Если вам нужен только текст, относящийся к статье, вы можете просто адаптировать указатель в вашем методе text_scraper и удалить только теги <p> в <section>:

def text_scraper(page_soup):
    text_body = ''
    # Find only the text related to the article:
    article_section = page_soup.find('section',{'class':'body'})
    # Returns the text of p tags, we stopped it at -5 bc that's when the text is irrelevant to the article
    for p in article_section.find_all('p'):
        if p.previousSibling and p.previousSibling.name is not 'em':
            text_body += p.text
    return(text_body)

Тогдастатья будет возвращена без текста внутри нижнего колонтитула ( Хезер Найт - обозреватель [...] и их борьба. )

РЕДАКТИРОВАТЬ: Добавлен тест народитель, чтобы избежать последней части Хроника Сан-Франциско [...] Twitter: @ hknightsf

...