2016-07-03 2 views
1

私はSeleniumとPythonを使ってWebページをスクラップし、次の構造を持つdivからデータを収集するのが難しいです:SeleniumとPythonを使用してdivからこのデータを収集するには

<div class="col span_6" style="margin-left: 12px;width: 47% !important;"> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Heading1</span> 
    <span class="MainGridcolumn2">Text that I want</span> 
    </div> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Another heading</span> 
    <span class="MainGridcolumn2">More text that I want</span> 
    </div> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Next heading</span> 
    <span class="MainGridcolumn2">Even more text</span> 
    </div> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Yet another heading</span> 
    <span class="MainGridcolumn2">Piece of text</span> 
    </div> 
</div> 

divには複数の行があり、それぞれに2つの列がスパンタグ内のデータ/テキストを含みます。 CSS IDはありません。

「MainGridcolumn2」スパンクラスに含まれるテキストの収集にのみ関心があります。

テキストを含む次のスパンタグに移動するために 'following_sibling'を使用しようとすると、最初の見出しに移動しようとしましたが、これを動作させることさえできませんそれは任意のテキストを返すされていないように私は、コンソールにそれを印刷しようとすると:

driver.find_element_by_xpath("//span['@class=MainGridcolumn1'][contains(text(), 'Heading1')]").text 

driver.find_element_by_xpath("//span[contains(text(), 'Heading1')]").text 
+0

を得ることができますMainGridcolumn2のデータは常に異なっており、データの順序は異なるページで変更される可能性があります。だから私は見出しのスパンに移動してから、次のスパンに移動して値を収集しようとしていました。 – Matt

+0

他のMainGridRowのdivがありますか? –

+0

はい - 約20合計 – Matt

答えて

0

一つの方法は、囲んでのdivつまり祖父母を取得し、スパンを引っ張ることであろうそれから:

あなたを与えるだろう
h = """<div class="col span_6" style="margin-left: 12px;width: 47% !important;"> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Heading1</span> 
    <span class="MainGridcolumn2">Text that I want</span> 
    </div> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Another heading</span> 
    <span class="MainGridcolumn2">More text that I want</span> 
    </div> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Next heading</span> 
    <span class="MainGridcolumn2">Even more text</span> 
    </div> 
    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Yet another heading</span> 
    <span class="MainGridcolumn2">Piece of text</span> 
    </div> 
</div> 

    <div class="MainGridRow"> 
    <span class="MainGridcolumn1">Yet another heading</span> 
    <span class="MainGridcolumn2">Piece of text I don't want</span> 
    </div>""" 

from lxml import html 

xm = html.fromstring(h) 
div = xm.xpath("//span[@class='MainGridcolumn1'][contains(text(), 'Heading1')]/../..")[0] 
print(div.xpath(".//span[@class='MainGridcolumn2']/text()")) 

['Text that I want', 'More text that I want', 'Even more text', 'Piece of text'] 

あなたはまた、単にこんにちは、MainGridcolumn1内のテキストは変更しない見出しが、値であり、親を選択し、親兄弟に

from lxml import html 

xm = html.fromstring(h) 
div = xm.xpath("//span[@class='MainGridcolumn1'][contains(text(), 'Heading1')]/..")[0] 
print(div.xpath(".//span[@class='MainGridcolumn2']/text() | .//following-sibling::div/span[@class='MainGridcolumn2']/text()")) 
+0

ありがとうございます。私はもともとページソース全体を "h"に渡しましたが、それは大きすぎると思われ、Pythonはエラーを投げたので、このdivに移動して残りのコードを使用するだけでした。 – Matt

+0

心配無用ですが、何が間違っていましたか? –

+0

私の頭の上から覚えていないが、文字列が長すぎると思ったのだろうか? – Matt

関連する問題