假设您有一些用 Selenium 抓取并用 BeautifulSoup 解析的 html 源代码:
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 中的属性
最佳答案
我想我记得处理过这样的网站 - IP 地址在内部通过多个 HTML 元素表示,其中一些通过 display: none
样式隐藏,一些具有适当的 CSS使他们隐形的类(class)。通过 BeautifulSoup
从这个困惑中获取真实的 IP 地址非常困难。
好消息是selenium
实际上处理这个用例,每当你得到 WebElement
的 .text
- 它会返回你一个 元素的可见文本 这正是需要什么。
演示:
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
关于python - 过滤掉 'display:none' 作为标记属性或在其 CSS 中的 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597616/