【发布时间】:2024-04-24 08:05:02
【问题描述】:
我试图简单地获得https://investor.vanguard.com/529-plan/profile/4514 中显示的证券价格。我运行这段代码:
from selenium import webdriver
from bs4 import BeautifulSoup
driver = webdriver.Firefox(executable_path=r'C:\Program_Files_EllieTheGoodDog\Geckodriver\geckodriver.exe')
driver.get('https://investor.vanguard.com/529-plan/profile/4514')
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
当我在硒打开的 Firefox 中“检查元素”价格时,我清楚地看到了这一点:
<span data-ng-if="!data.isLayer" data-ng-bind-html="data.value" data-ng-class="{sceIsLayer : isETF, arrange : isMutualFund, arrangeSec : isETF}" class="ng-scope ng-binding arrange">$42.91</span >
但我的汤里没有这些数据。如果我打印我的汤,html 与网站上显示的完全不同。我试过了,但完全失败了:
myspan = soup.find_all('span', attrs={'data-ng-if': '!data.isLayer', 'data-ng-bind-html': 'data.value', 'data-ng-class': '{sceIsLayer : isETF, arrange : isMutualFund, arrangeSec : isETF}', 'class': 'ng-scope ng-binding arrange'})
我完全被难住了。如果有人能指出我正确的方向,我将不胜感激。我觉得我完全错过了一些东西,可能有几件事......
【问题讨论】:
-
data-*值可通过datasetdeveloper.mozilla.org/en/docs/Web/API/HTMLElement/dataset 访问 -
抱歉,但我不明白这是什么意思。我确信这只是另一个迹象,表明我不知道自己在做什么!不过谢谢。
-
并非如此,只是以
data-开头的属性可以通过dataset[]访问。例如<input id="ease" data-value="5">可以通过document.querySelector('input#ease').getAttribute('dataset')[value]访问
标签: python selenium web-scraping beautifulsoup webdriverwait