2016-10-27 7 views
1

私はこのサイトからテーブルを抽出しています。私は私の主な問題は、この行であることを推測ウェブサイトからテーブルを削る際の問題?

# -*- coding: utf-8 -*- 
import scrapy 
from table.items import TableItem 


class Table(scrapy.Spider): 
    name = "table1" 
    start_urls = (
     'wesite.com', 
    ) 
    #//div[4]//div[1]//div[1]//table[1] 
    # 
    def parse(self, response): 
     sites = response.xpath('//*[@id="tabs-1"]/table//tr')[1:-2] 
     print('\n***********************************\n',sites) 

     for site in sites: 
      item = TableItem() 
      item['col1'] = site.xpath('td[1]/text()').extract() 
      item['col2'] = site.xpath('td[2]/text()').extract() 
      yield item 
      print('\n**********\n',item) 

:私はXPathをマッチして、テーブルのフィールドを見つけたが、私はサイトから任意のコンテンツを抽出することができないんだけど、これは私のクモがどのように見えるかです:

sites = response.xpath('//*[@id="tabs-1"]/table[1]/tr') 

私は実際にコンテンツを取得できます。しかし、それは非常に大きな誤ったフォーマットを繰り返しています(形式が誤っています)。どのようにテーブルを取得するの任意のアイデア?

答えて

1

ブラウザは、レンダリング中に独自のDOM要素を追加することがあります。与えられたサイトでは、右のxpathセレクターはresponse.xpath('//*[@id="tabs-1"]/table//tr')で、テーブル行を検索します。

編集:私はあまりにもそれに探していますテーブル

# -*- coding: utf-8 -*- 
import scrapy 
from table.items import TableItem 


class Table(scrapy.Spider): 
    name = "table1" 
    start_urls = (
     'http://www.accessdata.fda.gov/scripts/drugshortages/default.cfm#tabs-1', 
    ) 

    def parse(self, response): 
     sites = response.xpath('//*[@id="tabs-1"]/table//tr') 

     for site in sites: 
      item = TableItem() 
      item['col1'] = site.xpath('td/a/text()').extract_first() 
      col2 = site.xpath('td/em/strong/text()') 
      if col2: 
       item['col2'] = site.xpath('td/em/strong/text()')[0].extract().strip() 
      else: 
       item['col2'] = 'Not Available' 
      yield item 
+0

から右の要素を取得するためにコードを追加しました。 2分を返す –

+0

データを取得するために必要なコードを反映する答えを更新しました –

+0

'item ['col1']'を印刷すると何が表示されますか? –

関連する問題