使用Selenium从Javascript网页派生文本
我试图从以下网站中提取文本“该站由Delta Flow项目办公室管理”:。此行位于div类使用Selenium从Javascript网页派生文本,javascript,python,html,selenium,Javascript,Python,Html,Selenium,我试图从以下网站中提取文本“该站由Delta Flow项目办公室管理”:。此行位于div类stationContainer下。因为这是一个动态网页,所以我使用selenium来派生html 这是网站上的html 这是我的代码: from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() url = "https://waterdata.usgs.
stationContainer
下。因为这是一个动态网页,所以我使用selenium来派生html
这是网站上的html
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
url = "https://waterdata.usgs.gov/ca/nwis/uv?site_no=381504121404001"
browser.get(url) #navigate to the page
innerHTML = browser.execute_script("return document.body.innerHTML")
elem = browser.find_elements_by_xpath("//div[@class='stationContainer']")
print (elem)
我从打印消息中获得此结果:
selenium.webdriver.remote.webelement.webelement(session=“96fc124c0e2d1fd4cd86f61db272d52a”,element=“0.5862443940581294-1”)
我希望通过搜索div类来派生文本,但似乎我的方法不对。
elem
是一个列表而不是字符串。试试这个:
elem = browser.find_elements_by_xpath("//div[@class='stationContainer']")[0]
print elem.text
打印出所有的内容。因此,您可能需要一个更好的选择器或一种解析其余部分的方法。print(elem.text)
elem
是WebElement对象,因此是打印的消息。如果要访问文本,需要在末尾添加.text
,或者如果要获取其他属性,可以执行类似elem.get\u属性(“innerHTML”)
的操作
此外,由于div元素有很多其他文本,因此您将获得比您想要的多得多的文本。我没有查看过其他类似的页面,但也许您可以提取div的html中
和
之间的内容 好吧,您想要废弃的内容实际上不是动态的。您可以使用获取div类stationContainer
内容。让这有点挑战性的是,您正在搜索的元素不在某些标记之间。因此,解决此问题的方法是通过简单的字符串操作来提取
和
标记之间的内容,如下所示:
from bs4 import BeautifulSoup
from requests import get
soup = BeautifulSoup(get('https://your_url_here').text, "html.parser")
for i in soup.find_all('div', attrs={'class':"stationContainer"}):
print str(i).split('</form>')[1].split('<br/><br/>')[0].strip()
从bs4导入美化组
从请求导入获取
汤=美汤https://your_url_here“).text,“html.parser”)
对于汤中的i.find_all('div',attrs={'class':“stationContainer”}):
打印str(i).split(“”)[1]。split(“
”)[0]。strip()
这段代码会产生适当的结果 您可以获取页面源代码,然后使用像bs4或bs4这样的解析库lxml@whackamadoodle3000,当我获取页面源代码时,它不会标识这行文本,因为它是从JSU呈现的。请使用selenium的get page source并等待,以便javascript可以呈现它并检查以下内容: