假设您有一些用Selenium抓取并用BeautifulSoup解析的html源:
from selenium import webdriver from bs4 import BeautifulSoup driver = webdriver.Firefox() driver.get(url) soup = BeautifulSoup(driver.page_source)
有没有一种方法可以从html代码或汤对象中删除所有具有以下内容的元素:
1.)style=display:nonehtml标记源中的属性(即<div style = 'display:none'>...</div>)
style=display:none
<div style = 'display:none'>...</div>
要么
2.)display:none在页面的CSS中具有该属性
display:none
我想我记得曾经处理过这样的网站-IP地址是通过多个HTML元素在内部表示的,其中一些是通过display: none样式隐藏的,有些则具有使它们不可见的适当CSS类。从这个混乱中获得真正的IP地址BeautifulSoup是非常困难的。
display: none
BeautifulSoup
好消息是,selenium实际上处理这种使用情况下,只要你得到.text的WebElement-它会返回你一个 元素的可见文本 是需要的到底是什么。
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