我正试图从这个网站提取文本"这个由Delta Flow Projects Office"管理的电台:https://waterdata.usgs.gov/ca/nwis/uv?site_no=381504121404001。此行位于div类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类来推导文本,但似乎我没有以正确的方式解决这个问题。
答案 0 :(得分:1)
elem
是一个不是string
的列表。试试这个:
elem = browser.find_elements_by_xpath("//div[@class='stationContainer']")[0]
print elem.text
打印出所有内容。所以你可能需要一个更好的选择器或一种解析其余部分的方法。
答案 1 :(得分:1)
print (elem.text)
elem
是一个WebElement对象,因此是打印的消息。如果您想要访问该文字,则需要将.text
添加到最后,或者如果您想获取其他属性,则可以执行elem.get_attribute('innerHTML')
之类的操作。
此外,由于div元素有很多其他文本,因此您将获得比您想要的更多的文本。我没有查看其他类似的页面,但也许你可以在div的html中提取</form>
和<br><br>
之间的内容。
答案 2 :(得分:0)
嗯,您要废弃的内容实际上并不是动态的。您可以使用bs4
来获取 a.b.c
内容。这有点具有挑战性的是,您搜索的元素不在某些标记之间。因此,解决这个问题的方法是轻松进行字符串操作,以便在div class stationContainer
和</form>
标记之间提取内容,如下所示:
<br/><br/>
此代码生成相应的结果!