Intereting Posts
Как я могу сделать только активным на мобильных устройствах? Сбрасывание динамической веб-страницы в файл? Отзывчивые изображения с помощью css / html Как установить фиксированное фоновое изображение для файла PHP? Как избавиться от границы вокруг и изображения, используемого в качестве ссылки в Firefox? eBay Store Design Пользовательский HTML для применения ко всем страницам категории, таким как Главная страница попытка выравнивания навигационных ссылок с логотипом в бутстрапе 4 Пользовательская визуализация полосы прокрутки с помощью HTML / CSS / JavaScript Обещание по использованию ресурса AngularJS Опция «Мышь» в теге select Привязать края объектов друг к другу и предотвратить совпадение Возможно ли вставить HTML-контент в документ XML? Вызовите ajax каждый раз, когда флажок установлен в php Масштабирование шрифта Bootstrap слишком мала на мобильных устройствах Проблема с использованием значков с CSS

Исключить скрытые tags при очистке с помощью b4

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

1. Ones со style="display:none"

2. У них есть список стилей, упомянутых в каждом теге td .

И он изменяется с каждым тегом td. для примера ниже он имеет следующие стили,

 hLcj{display:none} .J9pE{display:inline} .kUC-{display:none} .Dzkb{display:inline} .mXJU{display:none} .DZqk{display:inline} .rr9s{display:none} .nGF_{display:inline} 

Таким образом, элементы с class=hLcj, kUC, mXJU, rr9s,etc Являются скрытыми элементами

Я хочу извлечь текст всего tr, но исключить эти скрытые tags. Я часами царапаю голову и до сих пор не добился успеха.

Любая помощь приветствуется. Спасибо, я использую bs4 и python 2.7

     .hLcj{display:none} .J9pE{display:inline} .kUC-{display:none} .Dzkb{display:inline} .mXJU{display:none} .DZqk{display:inline} .rr9s{display:none} .nGF_{display:inline}  35  
121
199 . 116
116
200 . 86 86 120 134
134
151
151
154 . 36 157
157
249
249
7808

Использование seleniumа облегчит задачу, поскольку знает, какие элементы скрыты, а какие нет.

Но, в любом случае, вот базовый код, который вам, вероятно, нужно будет улучшить. Идея здесь состоит в том, чтобы разобрать тег style и получить список исключаемых classов, иметь список тегов для исключения и проверять атрибут стиля каждого дочернего элемента в tr :

 import re from bs4 import BeautifulSoup data = """ your html here """ soup = BeautifulSoup(data) tr = soup.tr # get classes to exclude classes_to_exclude = [] for line in tr.style.text.split(): match = re.match(r'^\.(.*?)\{display:none\}', line) if match: classes_to_exclude.append(match.group(1)) tags_to_exclude = ['style', 'script'] texts = [] for item in tr.find_all(text=True): if item.parent.name in tags_to_exclude: continue class_ = item.parent.get('class') if class_ and class_[0] in classes_to_exclude: continue if item.parent.get('style') == 'display:none': continue texts.append(item) print ''.join(texts.strip()) 

Печать:

 199.200.120.36 

Также см:

  • BeautifulSoup Grab Visible Webpage Text