Фильтрация HTML-элементов, которые имеют 'display:none' либо в качестве атрибута тега, либо в своем CSS
Допустим, у вас есть какой-то html-источник, который был очищен с помощью Selenium и проанализирован с помощью BeautifulSoup:
from selenium import webdriver
from bs4 import BeautifulSoup
driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)
Есть ли способ удалить из html-кода или объекта soup все элементы, которые либо имеют:
1.) атрибут style=display:none в исходном html-теге (т. е. <div style = 'display:none'>...</div>)
Или
2.) имеют свойство display:none в CSS страницы
1 ответ:
Я помню, что имел дело с таким веб-сайтом - IP-адрес был внутренне представлен несколькими элементами HTML, некоторые из них были скрыты через стиль
display: none, некоторые имели соответствующий класс CSS, который делал их невидимыми. Получить реальный IP-адрес из этого беспорядка черезBeautifulSoupбыло довольно трудно.Хорошая новость заключается в том, что
seleniumфактически обрабатывает этот случай использования, и всякий раз, когда вы получаете.textизWebElement- он вернет вам видимый текст элемента а это именно то, что нужно.Демо:
In [1]: from selenium import webdriver In [2]: driver = webdriver.Firefox() In [3]: driver.get("http://proxylist.hidemyass.com/") In [4]: for row in driver.find_elements_by_css_selector("section.proxy-results table#listable tr")[1:]: ...: cells = row.find_elements_by_tag_name("td") ...: print(cells[1].text.strip()) ...: 101.26.38.162 120.198.236.10 213.85.92.10 ... 216.161.239.51 212.200.111.198
Comments