2017-06-08 15 views
0

私はの治療を初めて利用しています。私はウェブからいくつかのデータをクロールしたい。私は以下のようなhtml文書を手に入れました。いくつかの特定のタグのテキストを一緒にタグに入れてテキストを得る方法は?

<div class="user-info"> 
    <p class="user-img"> 
     something in p tag 
    </p> 
    <em>text</em> data I want 
    <a href="#"> 
     something in a tag 
    </a> 
</div> 

私はのみたいテキストデータを取得したいです。しかし、のテキストは、タグ<em></em>に入っています。だから私がdiv[contains(@class, "user-info")]/text()を使用した場合、私はがほしいと思うデータを得ることができます。 div[contains(@class, "user-info")]/node()を使用すると、すべてのタグがdiv.user-info、さらにdiv[contains(@class, "user-info")]/node()/text()になります。ですから、どうすればのテキストのデータをと一緒にのテキストデータにしたいのですか?

答えて

0

連結2つの必要なテキストノードを取得するためにXPath下に使用してみてください:

concat(//div[@class="user-info"]/em/text(), " ", //div[@class="user-info"]/text()[3]) 
+0

感謝を使用していますが、EM多分例えばデータ内:私はしたいテキストデータは、それがためだ失われました。 – Simon

+0

try '// div [@ class =" user-info "] //テキスト()[親(親:: aまたは親:: p)]' – Andersson

0

あなたが<p class="user-img">後、すべてのノードが必要な場合や<a href="#">something in a tag</a>前に、あなたがfollowing axisを使用することができます。

次軸文脈ノードの後ろにある、文脈ノードの後ろにあり、子孫を除き、属性ノードと名前空間ノードを除く、同じ文書内のすべてのノードを含む

>>> s = scrapy.Selector(text='''<div class="user-info"> 
...  <p class="user-img"> 
...   something in p tag 
...  </p> 
...  <em>text</em> data I want 
...  <a href="#"> 
...   something in a tag 
...  </a> 
... </div>''') 
>>> s.css('p.user-img') 
[<Selector xpath="descendant-or-self::p[@class and contains(concat(' ', normalize-space(@class), ' '), ' user-img ')]" data='<p class="user-img">\n  something i'>] 

>>> s.css('p.user-img').xpath('following::text()[following::a]').getall() 
['\n ', 'text', ' data I want\n '] 

>>> ''.join(s.css('p.user-img').xpath('following::text()[following::a]').getall()) 
'\n text data I want\n ' 
-1

私は""<em></em>を交換して、div[contains(@class, "user-info")]/text()

関連する問題