Захват BeautifulSoup видимый текст веб-страницы

В основном я хочу использовать BeautifulSoup для захвата строго видимого текста на веб-странице. Например, эта веб-страница является моим тестовым сценарием. И я главным образом хочу просто получить основной текст (статья) и возможно даже несколько имен вкладки тут и там. Я попробовал предложение в этом ТАК вопрос, который возвращает много из

2 ответа

Попробуйте это:

from bs4 import BeautifulSoup
from bs4.element import Comment
import urllib.request


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 = urllib.request.urlopen('http://www.nytimes.com/2009/12/21/us/21storm.html').read()
print(text_from_html(html))
211
ответ дан 24 November 2019 в 02:22
поделиться

Если вы посмотрите на исходный код ObservableCollection с Reflector, вы увидите, что это событие возникает для двух свойств:

this.OnPropertyChanged("Count");
this.OnPropertyChanged("Item[]");

Обратите внимание, что ObservableCollection явно реализует INotifyPropertyChanged , поэтому вы можете получить доступ к событию PropertyChanged только через переменную INotifyPropertyChanged :

INotifyPropertyChanged inpc = myObservableCollection;
inpc.PropertyChanged += myEventHandler;
-121 3632269-

Заголовок находится внутри тега , который вложен в тег

и тег
с идентификатором. "статья".

soup.findAll('nyt_headline', limit=1)

Должно работать.

Тело статьи находится внутри тега , который вложен в тег

с идентификатором articleBody. Внутри элемента сам текст содержится в тегах

. Изображения не попадают в теги

. Мне сложно экспериментировать с синтаксисом, но я ожидаю, что рабочий цикл будет выглядеть примерно так.

text = soup.findAll('nyt_text', limit=1)[0]
text.findAll('p')
1
ответ дан 24 November 2019 в 02:22
поделиться

Другие вопросы по тегам:

Похожие вопросы: