2017-06-14 15 views
0

私は間違って使用するタイトル。基本的に私はscrapyを使用してこのデータをスクラップしたい:Pythonのスクラップをフォローする兄弟は

<tr> 
 
    <td colspan=2> 
 
     <h4>Ottawa Macdonald-Cartier International Airport runways</h4> 
 
    </td> 
 
</tr> 
 
</tr> 
 
<tr class="odd"> 
 
    <td><a href="ottawa-macdonald-cartier-international-airport-runway-04-22-extended-info_R234949.html" title="Ottawa Macdonald-Cartier International Airport runway 04/22 extended info"><b>04/22</b></a></td> 
 
    <td>3300x75 <small>ft.</small></td> 
 
</tr> 
 
<tr class="even"> 
 
    <td><a href="ottawa-macdonald-cartier-international-airport-runway-07-25-extended-info_R234950.html" title="Ottawa Macdonald-Cartier International Airport runway 07/25 extended info"><b>07/25</b></a></td> 
 
    <td>8000x200 <small>ft.</small></td> 
 
</tr> 
 
<tr class="odd"> 
 
    <td><a href="ottawa-macdonald-cartier-international-airport-runway-14-32-extended-info_R234951.html" title="Ottawa Macdonald-Cartier International Airport runway 14/32 extended info"><b>14/32</b></a></td> 
 
    <td>10000x200 <small>ft.</small></td> 
 
</tr> 
 
<tr class=""> different repeat each page ....

私はCSV行の出力となってJSON形式にしたいです。そのように見える:

{'05/23': '3281x250 ft.','18/36': '3252x250 ft.'} 

しかし、私はいつもこのような結果を取得:

{05/23,18/36,3281x250 ,ft.,3252x250 ,ft.} 

と、この私のコード:

def parse_details(self, response): 
    runway1 = response.xpath(".//tr[contains(.,'runways')]/following-sibling::tr[@class]//td/a[contains(@title,'runway')]//text()").extract() 
    runway2 = response.xpath(".//tr[contains(.,'runways')]/following-sibling::tr[@class]//td[contains(.,'ft.')]//text()").extract() 
    runway = runway1 + runway2 
    runways = ','.join(runway) 

    yield {'runways':'{'+runways+'}'} 

私が望むように私のコードを解析できるようにする方法?なぜなら私はこのウェブサイト上のすべてのチュートリアルを検索しますが、依然としてスタックしていますおかげ

答えて

0
key_1 = response.xpath('//tr[@class="odd"]//a/b/text()').extract_first() 
value_1 = response.xpath('//tr[@class="odd"]//td[2]/text()').extract_first() 

key_2 = response.xpath('//tr[@class="even"]//a/b/text()').extract_first() 
value_2 = response.xpath('//tr[@class="even"]//td[2]/text()').extract_first() 

yield {key_1: value_1, key_2: value_2} 
+0

あなたに感謝anwser ..そして、本当にすみません。すでに私の質問を編集し、忘れてしまった言葉を忘れてしまった。各ページごとに異なる結果が得られた。時々2リストの奇妙さ、時には5リスト.. – Meganz

0

あなたはtrヘッダーの兄弟上のループができ、各キー/値の取得:

In [1]: response = scrapy.Selector(text='''<tr> 
    ...:  <td colspan=2> 
    ...:   <h4>Ottawa Macdonald-Cartier International Airport runways</h4> 
    ...:  </td> 
    ...: </tr> 
    ...: </tr> 
    ...: <tr class="odd"> 
    ...:  <td><a href="ottawa-macdonald-cartier-international-airport-runway-04-22-extended-info_R234949.html" title="Ottawa Macdonald-Cartier International Airport runway 04/22 extended info"><b>04/22</b></a></td> 
    ...:  <td>3300x75 <small>ft.</small></td> 
    ...: </tr> 
    ...: <tr class="even"> 
    ...:  <td><a href="ottawa-macdonald-cartier-international-airport-runway-07-25-extended-info_R234950.html" title="Ottawa Macdonald-Cartier International Airport runway 07/25 extended info"><b>07/25</b></a></td> 
    ...:  <td>8000x200 <small>ft.</small></td> 
    ...: </tr> 
    ...: <tr class="odd"> 
    ...:  <td><a href="ottawa-macdonald-cartier-international-airport-runway-14-32-extended-info_R234951.html" title="Ottawa Macdonald-Cartier International Airport runway 14/32 extended info"><b>14/32</b></a></td> 
    ...:  <td>10000x200 <small>ft.</small></td> 
    ...: </tr>''') 



In [2]: {tr.xpath('string(.//td/a[contains(@title,"runway")])').get(): 
    ...:  tr.xpath('string(.//td[contains(.,"ft.")])').get() 
    ...: for tr in response.xpath('.//tr[contains(., "runways")]/following-sibling::tr[@class]') } 
    ...: 
Out[2]: 
{u'04/22': u'3300x75 ft.', 
u'07/25': u'8000x200 ft.', 
u'14/32': u'10000x200 ft.'} 

例のコールバックは、次のようになります..こんにちは

def parse_details(self, response): 
    for tr in response.xpath('.//tr[contains(., "runways")]/following-sibling::tr[@class]'): 
     yield {tr.xpath('string(.//td/a[contains(@title,"runway")])').get(): 
        tr.xpath('string(.//td[contains(.,"ft.")])').get()} 
+0

こんにちは..あなたの答えに感謝します。上記のコマンド?私はまだPythonで新しいです.. – Meganz

関連する問題