2017-05-01 3 views
-1

私はテーブルを掃除しようとしていますが、テーブルはCSSクラス "table"に属していて、そのテーブルにはtrがたくさんあり、trにはそれぞれ3個、最初にtdがあり、2番目にtdは3番目ですtd(もし存在すれば電話番号の場合)それぞれの "tr"から名前、アドレス、電話が必要ですが、何らかの理由でセレクタを 'td :: text'(各trの中のすべてのtdsのテキスト)名前、住所、電話はので、私は、XPathを使用して、アドレスの名前第二tdのための第一のTDのためとあれば、これを行う別途ガーベジの値を与えるPython Scraping

必要

  NAME_SELECTOR = '//tr/td[1]/text()' 
      ADDRESS_SELECTOR = '//tr/td[2]/text()' 
      PHONE = '//tr/td[3]/text()' 

      yield { 
       'name': np.xpath(NAME_SELECTOR).extract_first(), 
       'address': np.xpath(ADDRESS_SELECTOR).extract_first(), 
       'phone': np.xpath(PHONE).extract_first(), 
      } 

が、このグラム

電話番号の3番目のTDを存在しますこのようなごみの値 THE IMAGE WITH DATA

なぜこのゴミ値ですか? (私は練習のためにそれを選ぶ理由thatsの)それはそれはだ、ここ

は、XPathの先頭にコード全体

try: 
    import scrapy 
except ImportError: 
    print "\nERROR IMPORTING THE NECESSARY LIBRARIES\n" 

class NameSpider(scrapy.Spider): 
    name = 'name spider' 
    start_urls = ['http://www.locatefamily.com/Street-Lists/Australia/index-1.html'] 

    def parse(self, response): 
     SET_SELECTOR = 'table.table tr' 
     for np in response.css(SET_SELECTOR): 

      NAME_SELECTOR = '//tr/td[1]/text()' 
      ADDRESS_SELECTOR = '//tr/td[2]/text()' 
      PHONE = '//tr/td[3]/text()' 

      yield { 
       'name': np.xpath(NAME_SELECTOR).extract_first(), 
       'address': np.xpath(ADDRESS_SELECTOR).extract_first(), 
       'phone': np.xpath(PHONE).extract_first(), 
      } 

答えて

2

/で常にルートドキュメントを参照するコードは、ウェブサイトがあまりにも非常に簡単で非常に簡単です動作するはずです現時点で変数が参照するものとは無関係に、すべての繰り返しで同じ値が得られるのはなぜですか。あなたは明示的には現在のコンテキスト要素に相対的でXPathを意味することを伝えるために.を追加する必要があります。

for np in response.css(SET_SELECTOR): 
    NAME_SELECTOR = './/tr/td[1]/text()' 
    ADDRESS_SELECTOR = './/tr/td[2]/text()' 
    PHONE = './/tr/td[3]/text()' 

    yield { 
     'name': np.xpath(NAME_SELECTOR).extract_first(), 
     'address': np.xpath(ADDRESS_SELECTOR).extract_first(), 
     'phone': np.xpath(PHONE).extract_first(), 
    } 
+0

はあなたに –

+0

非常に感謝しかし、私はこの」.//td[1]/textようにそれを書かなければなりませんでした何らかの理由で何も返さなかったのです。 –

+0

私は参照しています。もし 'td'が' tr'の直接の子であれば 'td [1]'、 'td [2]'、 'td [3]' '' .// 'がなくても... – har07

関連する問題