В основном я хочу использовать BeautifulSoup для захвата строго видимого текста на веб-странице. Например, эта веб-страница является моим тестовым сценарием. И я главным образом хочу просто получить основной текст (статья) и возможно даже несколько имен вкладки тут и там. Я попробовал предложение в этом ТАК вопрос, который возвращает много из теги и комментарии HTML, которые я не хочу. Я не могу выяснить аргументы, в которых я нуждаюсь для функции
findAll()
чтобы просто получить видимые тексты на веб-странице.
Так, как я должен найти весь видимый текст, исключая сценарии, комментарии, CSS и т.д.?
Попробуйте это:
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))
Если вы посмотрите на исходный код 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)
, который вложен в тег
сам текст содержится в тегах
. Изображения не попадают в теги
. Мне сложно экспериментировать с синтаксисом, но я ожидаю, что рабочий цикл будет выглядеть примерно так.
text = soup.findAll('nyt_text', limit=1)[0]
text.findAll('p')