簡體   English   中英

Python Beautiful Soup-未提取跨度類文本

[英]Python Beautiful Soup - Span class text not extracted

我第一次使用美麗的湯,並且沒有提取span類的文本。 我對HTML並不熟悉,所以不確定為什么會發生這種情況,因此很容易理解。

我用下面的代碼:

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>

您嘗試提取的數據不存在。 頁面加載后使用JS加載。 網站使用JSON API在頁面上加載信息。 如此美麗的湯找不到數據。 可以在以下鏈接上查看數據,該鏈接在網站上點擊JSON API並提供JSON數據。

https://www.anz.com/productdata/productdata.asp?output=json&country=AU&section=PHL

您可以解析json並獲取數據。 同樣對於HTTP請求,我會推薦請求包。

就像其他人所說的那樣,內容是JavaScript生成的,您可以將seleniumChromeDriver一起使用,以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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM