2017-01-25 17 views
0

イムサイト上の特定の「アイテム」を解析しようとしているが、私は知らないその場合は、クラス、オブジェクト、ID、または何か他のものパイソン - BeatifulsoupでURLから特定の「オブジェクト」を取得し

私のコード:

soup = BeautifulSoup(urllib2.urlopen(myURL)) 
divdata = soup.find('div') 
print(divdata) 

そして、それは返します

<div data-store='{"Auth":{"cookie":null,"user":null,"timestamp":1485297666762},"Blocked":{},"Broadcast": 
{"forceUpdate":false,"failed":[],"pending":[],"error": 
{"isNotFound":false,"isServerError":false,"isUnavailable":false}},"BroadcastCache":{"broadcasts":{"ID1":{"broadcast": 
{"data":{"class_name":"Broadcast","id":"ID1","state":"running, 
....(more).... 

だから私は、私は

を試してみました 「実行中」またはこれまでにどのような「状態」にあるを取得したいです
statedata = soup.find('div', {"class":"state"}) 

しかし、何も返されませんが、それを取得する正しい方法は何ですか?

答えて

-1

正しい構文はsoup.find_all('div', class_='state')です。

class_の後のアンダースコアに注意してください。

divの実際のクラスが 'data-store'で、残りが単なる文字列であり、実際にはタグの内容ではないように見えるので、変更なしであなたのケースではうまく動作することはありません。あなたはちょうどそれにstring.find('\"state\"')を使用することができます。

+0

あなたのコードをテストしていますか? –

+0

そう、私はそれをどちらかの仕事に傾けることはできません。私はそれが文字列を返すとは思わない – Yoshidk

0
import json 
div_tag = soup.find('div', {'data-store':True}) 
data_string = div_tag['data-store'] # get data string 
json.loads(data_string)['BroadcastCache']['broadcasts']['ID1']['broadcast']['data']['state'] # convert data string to python dict and get state 

アウト:

'running' 
+0

出力は "json"に固定されていますか、それはどのように機能しますか?そして、他のすべての「クラス」は同じ順序で先に来なければなりませんか? – Yoshidk

+0

@Yoshidkこの文字列はjson形式であり、 'json.loads()'を使用してpython dictに変換し、このdictオブジェクトを通じてデータにアクセスできます。 –

関連する問題