2017-08-16 56 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]