2017-11-03 19 views
0

私はウェブスクレイピングには新しく、BeautifulSoupを使用して毎日の住宅ローン金利を削っています。しかし、私が掻き取ろうとしているサービサーサイトの多くは、「none」または空のリストを返します。私がスクラップしようとしているタグが確実に存在し、なぜこれが起こっているのか分かりません。その一例を以下に示します。要素が確実に存在する場合、BeautifulSoupは返されません

html=urlopen('https://www.popular.com/en/mortgages/') 
bs0bj=BeautifulSoup(html, 'html.parser'); 
rate=bs0bj.find('span', {'class':'text-md text-popular-medium-blue'}).div 
print(rate) 
+0

「.div」の部分は必要ありません。 – Mako212

+0

@jordiburgos重複ではなく、ここでの問題は異なります。 – rubik

答えて

0

をあなたが後にあるデータを取得するには

t=1t=2t=6がなどP&I Paymentを示し、APRを示し、Annual interestを示しますあなたは以下のようなPythonと組み合わせてセレンを使うことができます:

from bs4 import BeautifulSoup 
from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get('https://www.popular.com/en/mortgages/') 

soup = BeautifulSoup(driver.page_source,"lxml") 
item = soup.select('.table-responsive')[0].select("span div")[0].text 
print(item) 
driver.quit() 

結果:

+0

すごく、ありがとう! –

+0

要件を満たしている場合は、回答として受け入れるようにしてください。ありがとう。 – SIM

3

あなたは(クロームやFirefoxでview-source:経由、またはファイルにあなたのhtml文字列を書き込むことによって、例えば)ページのソースをチェックすると、あなたが探している要素がないことがわかります。実際には、料金が動的にロードされます。

<td> 
    <span class="text-md text-popular-medium-blue"> 
    <script type="text/javascript" src = "https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&textcolor=3784D2&backgroundcolor=ffffff&t=1"></script> 
    </span> 
</td> 

あなたはスクリプトのURLをたどることができますし、応答は次のようなものであることがわかります:

document.write('<div>2.75%</div>') 

この応答はするのに十分な、おそらく定期的にありますそれに正規表現を使用できるようにする。

+0

JSを実行するブラウザがなくても動作しますか? – SuperStew

+0

@SuperStewはい、私たちはJavascriptのソースを読んでいるので、実行しません。代わりに、ヘッドレスブラウザやスプラッシュのようなプロキシを使用してすべてをレンダリングすると、OPのコードが機能します。しかし、この単純なケースでは、それは間違いなく過度のものです。 – rubik

1

rubikによると、レートはJSを使用して動的に読み込まれます。幸いなことに、コンテンツの構造は比較的単純です。ここでは分析方法は次のとおりです。

Chrome(または他のブラウザ)で新しいタブを開き、右クリックしてview-sourceを選択します。 Networkタブに切り替え、preserve logオプションを確認します。

今、ウェブサイトhttps://www.popular.com/en/mortgages/を開きます。ロードされた内容は左側のパネルに表示されます。

enter image description here

各項目をチェックして、あなたがスクラップにしたいものを見つけるまで、そのPreview内容を分析。ここに私が見つけたのは、2.75%は、ウェブサイトに表示される住宅ローンの金利の値と一致します。

今度はHeadersタブに切り替え、Request URLを確認してください。これがサーバーに送信された最後の要求です。

enter image description here

次のステップは、私がtextcolorbackgroundcolorは、CSSの情報を示しているので、私はそれらを削除し、URLがまだ有効で見つけたことを推測リクエストURLにhttps://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&textcolor=3784D2&backgroundcolor=ffffff&t=1

を分析することです。 https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&t=1

id_ratesがどのanalyzationのない住宅ローンの金利の順序を示すことは明らかである:

は、今、私たちは、シンプルなURLを持っています。質問は、tは何を意味していますか?

これは、他のプレビューの内容を分析してルールを見つけることで解決できます。ここでは、そのプロセスをスキップして、結論を出したいと思います。

これらを行った後、今あなたが直接要求のURLからコンテンツをスクラップすることができます:

from urllib2 import urlopen 
import re 

file=urlopen('https://apps.popular.com/navs/rates_wm_modx.php?id_rates=1&t=1') 
annual_interest = re.findall(r"\d+\.\d+", str(file.read()))[0] 
#the annual interest is 2.75 
関連する問題