2017-08-26 5 views
0

私はウェブサイトを削って(初めて)作業しています。私はウェブサイトから緯度(小数点以下の桁数)を引き出そうとしています。私は、情報を含む正しい親ノードを引き出すことができましたが、実際の番号を引き出す方法には固執しています。私が行った検索のすべては、私が文字列(私はそうではない)を知っている場合、または文字列が子ノードにある場合にはそれを引き出す方法を教えてくれました。どんな助けも素晴らしいだろう。私はデータセットに追加しできるよう35.7584895を引き出し、オブジェクトとして保存する必要が美味しいスープを使ってオブジェクトから情報を引き出すことができません4

a_string = soup.find(string="Latitude in decimal degrees") 

a_string.find_parents("p") 
Out[46]: [<p><b>Latitude in decimal degrees</b><font size="-2"> 
(<a  href="definitions.html#LAT" target="_blank"><u>see definition</u></a>) 
</font><b>:</b> 35.7584895</p>] 

test = a_string.find_parents("p") 

print(test) 
[<p><b>Latitude in decimal degrees</b><font size="-2"> (<a 
href="definitions.html#LAT" target="_blank"><u>see definition</u></a>)</font> 
<b>:</b> 35.7584895</p>] 

は、ここに私のコードです。

私は美しいスープ4とPython 3

+0

回答が要件を満たしている場合は、「受け入れ」にしてください。 –

答えて

1

注目すべき最初のものを使用していますが、あなたがfind_parents方法(複数)を使用しておりますので、testがリストである、ということです。あなたはそれの最初の項目だけを必要とします。

私はこれを行うことであなたの状況をシミュレートします。

>>> import bs4 
>>> HTML = '<p><b>Latitude in decimal degrees</b><font size="-2"> (<a href="definitions.html#LAT" target="_blank"><u>see definition</u></a>)</font><b>:</b> 35.7584895</p>' 
>>> item_soup = bs4.BeautifulSoup(HTML, 'lxml') 

こののテキストコンテンツを回復する最も簡単な方法は、これを行うことです。

>>> item_soup.text 
'Latitude in decimal degrees (see definition): 35.7584895' 

しかし、あなたは数が欲しいです。あなたはこれをさまざまな方法で得ることができ、そのうち2つは私の心にかかります。前のステートメントの結果をstrに割り当てて、結果を操作できるようにします。

>>> str = item_soup.text 

1つの方法は、コロンを検索することです。

>>> str[1+str.rfind(':'):].strip() 
'35.7584895' 

もう1つは正規表現を使用することです。

>>> bs4.re.search(r'(\d+\.\d+)', str).groups(0)[0] 
'35.7584895' 
+0

ありがとう@BillBell!それはうまくいった。しかし、1つの質問、どのようにそれがリストであることを知っていましたか?私が見つけたのは、それがbs4.element.ResultSetであることでしたが、私が見つけたものは何もなかったのです。 – KEA

+0

'.groups(0)[0]'を見ていると思います。これは* regex *検索の結果のためのメソッドです。正規表現には( '\ d + \。\ d +)'というグループが1つしかありません。これらの検索結果がリストとして返されるので、最初のもの、つまり0番目を選択しました。 –

関連する問題