Красивый суп удалить верхний индекс - PullRequest
0 голосов
/ 30 июня 2018

Как убрать верхний индекс со всего текста? У меня есть код ниже, который получает весь видимый текст, но верхние индексы для сносок портят вещи. Как мне их удалить?

например Active accounts (1),(2), (1),(2) - видимые верхние индексы.

from bs4 import BeautifulSoup
from bs4.element import Comment
import requests


f_url='https://www.sec.gov/Archives/edgar/data/1633917/000163391718000094/exhibit991prq12018pypl.htm'

def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
        return False
    if isinstance(element, Comment):
        return False
    return True


def text_from_html(body):
    soup = BeautifulSoup(body, 'html.parser')
    texts = soup.findAll(text=True)
    visible_texts = filter(tag_visible, texts)  
    return u" ".join(t.strip() for t in visible_texts)

html = requests.get(f_url)
text= text_from_html(html.text)

1 Ответ

0 голосов
/ 30 июня 2018

Функция BeautifulSoup find_all возвращает список всех отдельных дискретных HTML-элементов на входе (find_all - это правильная функция для использования в BeautifulSoup 4 и предпочтительнее, чем findAll). Следующая функция, filter, проходит через этот список и удаляет элементы, для которых ее подпрограмма обратного вызова возвращает False. Функция обратного вызова проверяет имя тега каждого фрагмента и возвращает False, если он находится в нежелательном списке, в противном случае True.

Если эти верхние индексы всегда обозначаются соответствующим HTML-тегом sup, вы можете добавить их в список ненужных в функции обратного вызова.

Возможные подводные камни:

  1. Предполагается, что используется буквенный (семантически правильный) тег sup, а не, например, класс или диапазон, который просто указывает vertical-align: superscript; в его CSS;
  2. Предполагается, что вы хотите избавиться от всех элементов, находящихся в этом надстрочном теге. Если есть исключения («20 th век»), вы можете проверить содержание текста; например, только удалить, если все его содержимое является числовым. Если есть исключения из , которые ("a 2 = b 2 + c 2 "), вам необходимо проверить наличие более широкий контекст, или создайте белый или черный список включений / исключений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...