2017-08-16 52 views
0

我第一次使用美丽的汤,并且span文本没有被提取。我不熟悉HTML,所以我不确定为什么发生这种情况,所以理解起来会很好。Python美丽的汤 - 跨度类文本没有提取

我用下面的代码:

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = 'https://www.anz.com.au/personal/home-loans/your-loan/interest-rates/#varhome' 

uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.Close() 
page_soup = soup(page_html, "html.parser") 

content = page_soup.findAll("span",attrs={"data-item":"rate"}) 

有了这个代码为索引0它返回下列信息:

<span class="productdata" data-baserate-code="VRI" data-cc="AU" data- 
item="rate" data-section="PHL" data-subsection="VR"></span> 

不过我预计这样的事情时,我透过Chrome检查,其具有诸如利率的文本:

<span class="productdata" data-cc="AU" data-section="PHL" data- 
subsection="VR" data-baserate-code="VRI" data-item="rate">5.20% p.a.</span> 
+1

您正在查找的信息是在页面加载后通过脚本添加的。它不在页面的原始代码中,因此BeautifulSoup没有找到,因为BeautifulSoup不执行任何脚本。 – Tomalak

回答

0

正如有人说,生成内容的JavaScript,你可以使用selenium一起ChromeDriver找到你想要的数据的东西,如:

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("https://www.anz.com.au/personal/home-loans/your-loan/interest-rates/#varhome") 

items = driver.find_elements_by_css_selector("span[data-item='rate']") 
itemsText = [item.get_attribute("textContent") for item in items] 

>>> itemsText 
['5.20% p.a.', '5.30% p.a.', '5.75% p.a.', '5.52% p.a.', ....] 

由上述可见, BeautifulSoup根本没有必要,但是您可以使用它来解析页面源并获得相同的结果:

from bs4 import BeautifulSoup 
soup = BeautifulSoup(driver.page_source, 'html.parser') 
items = soup.findAll("span",{"data-item":"rate"}) 
itemsText = [item.text for items in items]