2016-04-26 21 views
1

次のソースコードから "0.449"を掻き集めることに興味があります。http://hdsc.nws.noaa.gov/hdsc/pfds/pfds_map_cont.html?Lat=33.146425&Lon=-87.5805543です。 BeautifulSoupを使用してBeautifulSoupを使用して入れ子になったhtmlをスクラップできない

<td class="tblInner" id="0-0"> 
    <div style="font-size:110%"> 
     <b>0.449</b> 
    </div> 
    "(0.364-0.545)" 
</td> 

、私は現在書かれている:

になり
storm=soup.find("td",{"class":"tblInner","id":"0-0"}) 

を:

<td class="tblInner" id="0-0">-</td> 

私は、TD内にネストされたすべてのものが表示されない理由がわからないと思います。 tdの内容を検索すると、結果は単に " - "になります。このコードから私が望む価値をどうやって削り取ることができますか?

+0

あなたがこの回答を参照することがhttp://stackoverflow.com/questions/ 8960288/get-page-generated-with-javascript-in-python – Mani

答えて

1

最初の読み込み後にJavaScriptを使用してDOMを更新するウェブサイトをスクラップする可能性があります。

あなたはカップルの選択肢があります。

  • は、HTMLページを埋めるJavaScriptコードからデータを得なかった場所を見つけて、代わりにこれを呼び出します。データは、CURLで直接呼び出すことができるAPIから得られる可能性が最も高いです。それは99%の時間の最善の方法です。
  • JavaScriptが変更された後に、HTMLコードを取得するためにヘッドレスブラウザ(zombie.js、...)を使用します。便利で高速ですが、これを行うためのPythonのツールはほとんどありません(Google python headless browser)。
  • 実際のブラウザ(chrome、firefox、...)をリモートコントロールするために、セレンまたはスプラインを使用します。それは便利だし、Pythonで動作しますが、地獄のように遅い

編集:

私はあなたがスクラップしたいURLを掲示していることがわかりませんでした。あなたの特定のケースで

、必要なデータは、このURLにAJAX呼び出しから来ている:

http://hdsc.nws.noaa.gov/cgi-bin/hdsc/new/cgi_readH5.py?lat=33.1464&lon=-87.5806&type=pf&data=depth&units=english&series=pds

あなたは今だけ、各パラメータが何をするかを理解する必要があり、代わりのものの出力を解析しますHTML scrapperを書く。

0

は、エラーチェックとモジュール性の欠如を許しなさい、これはあなたが@Eloims観察に基づいて、必要なものを取得する必要があります:

import requests 
import re 

url = 'http://hdsc.nws.noaa.gov/cgi-bin/hdsc/new/cgi_readH5.py?lat=33.1464&lon=-87.5806&type=pf&data=depth&units=english&series=pds' 

r = requests.get(url) 
response = r.text 

coord_list_text = re.search(r'quantiles = (.*);', response) 
coord_list = eval(coord_list_text.group(1)) 

print coord_list[0][0] 
+0

これは完全に機能しました。ありがとうございました! – Ashton

関連する問題