2016-03-26 2 views
1

私はウェブサイトからの情報「のプレイで再生する」取得したい:ポイントは、それが使用するゲームで作られていた場合Scrapyセレクタを使用して一貫性のないマークアップを処理する方法は?

<tr> 
     <td>8</td> 
     <td>Def Rebound</td> 
     <td>13 - 13</td> 
     <td>Zalgiris Kaunas</td> 
     <td>VECVAGARS, KASPARS</td> 
    </tr> 
    <tr class="play"> 
     <td>8</td> 
     <td>Two Pointer</td> 
     <td>15 - 13</td> 
     <td>Zalgiris Kaunas</td> 
     <td>VECVAGARS, KASPARS</td> 
    </tr> 

http://www.euroleague.net/main/results/showgame?gamecode=197&seasoncode=E2015#!playbyplay

トリッキーなマークアップコード

<tr class="play">

代わり:

<tr>

...情報を視覚的に分離します。私はこれを処理することはできません使用しています「イベント後のイベント」と私のコードを取得したい:

for sel in response.xpath('//div[@class="wp-field wp-field-content table-responsive"]//div/table/tbody/tr'): 
    item['Minute'] = sel.xpath('td[1]/text()').extract() 

私はrecieving午前の結果は次のとおりです。コードがある場合

{'Event': [u'Def Rebound'], 
'Minute': [u'19'], 
'Player': [u'KIRILENKO, ANDREI'], 
'Res_h': [u'31 - 38'], 
'Res_v': [u'31 - 38'], 
'Team_player': [u'CSKA Moscow']} 

{'Event': [], 
'Minute': [], 
'Player': [], 
'Res_h': [], 
'Res_v': [], 
'Team_player': []} 

空の値が表示されます。 "tr"の "play"クラスに対処する。

質問:私はそれを行うことができますどのように

、私は2つの可能なマークアップのオプションを持っている場合、特定のランダムな状況でaccures?

答えて

1

これは、あなたが望むすべてを取得します:

In [53]: l=['Event',        
'Minute', 
'Player', 
'Res_h', 
'Res_v', 'Team_player'] 

In [54]: table = r.xpath("//table[@class='table']") 

In [55]: for tr in table.xpath(".//tr[position() > 1]"): 
      assert dict(zip(l, tr.xpath("./td//text()").extract())) != {} 

....:  
In [56]: 

それは、ヘッダー行をスキップし、すべての残りの部分を引っ張ると、Lの要素の順序が間違っているが、考え方が正しいので、私は数字にあなたを残します何が欲しいのか、そしてどこで返されるのかは、tr.xpath("./td//text()"

[u'15', u'Shot Rejected', u'29 - 25', u'Zalgiris Kaunas', u'HANLAN, OLIVIER'] 
[u'15', u'Block', u'29 - 25', u'Real Madrid', u'NOCIONI, ANDRES'] 
[u'15', u'Off Rebound', u'29 - 25', u'Zalgiris Kaunas', u' '] 
[u'15', u'Two Pointer', u'31 - 25', u'Zalgiris Kaunas', u'VENE, SIIM-SANDER'] 
[u'15', u'Assist', u'31 - 25', u'Zalgiris Kaunas', u'RANDLE, JEROME'] 
[u'16', u'Minute', u'31 - 25', u' ', u' '] 
[u'16', u'Three Pointer', u'31 - 28', u'Real Madrid', u'NOCIONI, ANDRES'] 
[u'16', u'Assist', u'31 - 28', u'Real Madrid', u'LLULL, SERGIO'] 
[u'16', u'Two Pointer', u'33 - 28', u'Zalgiris Kaunas', u'RANDLE, JEROME'] 
[u'16', u'Foul', u'33 - 28', u'Zalgiris Kaunas', u'SAJUS, MARTYNAS'] 
[u'16', u'Foul Drawn', u'33 - 28', u'Real Madrid', u'LLULL, SERGIO'] 
[u'16', u'Free Throw In', u'33 - 29', u'Real Madrid', u'LLULL, SERGIO'] 
[u'16', u'Free Throw In', u'33 - 30', u'Real Madrid', u'LLULL, SERGIO'] 
[u'16', u'In', u'33 - 30', u'Zalgiris Kaunas', u'JANKUNAS, PAULIUS'] 
スニペットです。
関連する問題