2016-04-05 20 views
1

私はPythonスクリプトを使用して、Seleniumライブラリを使用してWebサイトから情報を抽出しています。 は、いくつかのセレクタを使用して、私は次のようになりますそのあと私はターゲット要素のWebElementオブジェクトを得ました:Seleniumを使用した親要素テキストの選択

<myTargetElement><strong>324. </strong>Some interesting content that might contain numbers 323 or dots ...,;</myTargetElement> 

私は別々に2つの情報を抽出したい:

Idが囲まstrongタグは、と私は次のようにこれをやった:

myTargetElementObject.find_element_by_tag_name('strong').text.strip(' .') 

は今、私は他の部分を抽出する方法を困惑しています。 myTargetElementObject.textを使用した場合、テキスト内のIDが返されます。

私が抽出しているデータは非常に大きく、正規表現の使用には慎重です。 WebElementオブジェクトを使用してサブ要素のない要素のテキストを返す方法はありますか?

+0

データをディスクにバッファリングしない限り、Seleniumはすでにデータを解析してRAM内のオブジェクトにあると仮定しています。 –

答えて

2

私は、ターゲット要素の完全なテキストを取得し、最初の.ことによってそれを分割します:

一般に
strong, rest_of_the_content = myTargetElementObject.text.split(". ", 1) 

しかし、タスクが(ここでは、明確な区切り文字を持っている)ことは容易ではありません:テキストノードをセレンで直接ターゲティングして取得することはできません。following-sibling::text()などです。一般的なアプローチは、子テキスト、親のテキストを取得し、親から子テキストを削除することです:


別の可能なアプローチはいくつかの別のHTML構文解析を伴うだろうBeautifulSoupで、横向きに移動してテキストノードにアクセスできます。

from bs4 import BeautifulSoup 

html = myTargetElementObject.get_attribute("outerHTML") 
soup = BeautifulSoup(html, "html.parser") 
label = soup.strong 
text_after = label.next_sibling 

print(label.get_text(), text_after) 
+0

しかし、あなたはまだ手動で周囲のHTMLのおかしな構文解析をする必要がありますか?あるいは、 '.text'は' 324だけを含んでいます。いくつかの興味深いコンテンツ '? – DaveBensonPhillips

+0

@HumphreyTriscuitではなく、 '.text'はあなたに完全なテキスト(子テキストを再帰的に)を与えます。 – alecxe

+0

@HumphreyTriscuitええ、あなたは' 324を得るでしょう。いくつかの興味深いコンテンツ '。 – alecxe

関連する問題