2017-11-12 21 views
1

私はリンク(https://www.century21.com/real-estate/rock-spring-ga/LCGAROCKSPRING/)をこすってみました。私はそれから「ベッド」データを抽出したかったのです。その中にはいくつかの家のためのいくつかの空の詳細があるので、わずかな "ベッド"の詳細が抽出されます。しかし、私はすべてのための詳細を持っています。そこになければ、 "NaN"か何かが表示されるはずです。私は "2台" を抽出するためのxpathコマンドを使用空白を除いた治療

<div class="property-beds"> 
 
      <strong>2</strong> beds 
 
     </div>

:もう一つの問題は、私はこのタグを検査していることです。 「ベッド」は2つのベッドで表示されます。だから私は "|" 2つの要素を統一する。

response.xpath('//div[@class="property-beds"]/strong/text() | //div[@class="property-beds"]/text()'] 

これは私に正しい出力を得たが、問題はそれが2つの別々の行(別の行に1行とベッドで2)に結果を示しているされて、単一の行に表示する.how?

答えて

2

あなたは要素のテキストおよびすべての子ノードを抽出するために、親要素にstring()を使用することができます:あなたは複数の要素を持っている場合は

In [10]: root.xpath('string(//div[@class="property-beds"])') 
Out[10]: '2 beds' 

、あなたがマッチした要素を反復処理する必要があります//div[@class="property-beds"]、次にelem.xpath('string()')を入力します。

+0

2番目の部分を説明できますか? 1つ以上の要素の場合にコマンドを反復する。 –

+0

@AkhilReddy: 'string()'は、セットの最初の要素に対してのみ機能します。あなたはresponse.xpath( '// div [@ class = "property-beds"]')でelemを行う必要があります:print(elem.xpath( 'string()')。extract()) '。 – Blender

0

string()メソッドを使用します。 root.xpath('string(//div[@class="property-beds"])')