2017-08-16 24 views
0

初めて美しいスープを使用していますが、スパンクラスのテキストが抽出されていません。私はHTMLに精通していないので、なぜこれが起こるのか分かりませんので、理解するのはすばらしいことです。Python Beautiful Soup - Spanクラスのテキストが抽出されない

私は以下のコードを使用しました

:それは次のように返し、インデックス0のため、このコードで

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"}) 

を:

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

私はクロームを経由して検査する場合、私はこのような何かを期待しかし、金利などのテキストを持っています:

<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

答えて

1

抽出しようとしているデータはありません存在しません。ページがロードされた後にJSを使用してロードされます。ウェブサイトはJSON APIを使用してページの情報を読み込みます。だから美しいスープはデータを見つけることができません。データは、サイトのJSON APIをヒットし、JSONデータを提供する次のリンクで表示できます。

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

あなたはJSONを解析し、データを取得することができます。またHTTPリクエストの場合は、requestsパッケージをお勧めします。

0

他の人は、コンテンツが生成されたJavaScriptで、あなたのような何かをしたいデータを見つけるために一緒にseleniumChromeDriverを使用することができ、言ったように:、上で見たよう

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] 
関連する問題