2017-05-16 14 views
0

私はこのウェブサイトhttp://www.golf.org.auからいくつかのリサーチを行ったことがあります。私はそれをしたテーブルにデータをフェッチするウェブサイトを作るが、私はまだ何も欠けているアイデアを失敗している?ここでASP.NETベースのウェブサイトのコンテンツをスクラップで掻き集める

は私のコードです:

# -*- coding: utf-8 -*- 
import scrapy 


class GolfscraperSpider(scrapy.Spider): 
    name = "golfscraper" 
    allowed_domains = ["golf.org.au","www.golf.org.au"] 
    ids = ['3012801330', '3012801331', '3012801332', '3012801333'] 
    start_urls = [] 
    for id in ids: 
     start_urls.append('http://www.golf.org.au/handicap/%s' %id) 

    def parse(self, response): 
     scrapy.FormRequest('http://www.golf.org.au/default.aspx? 
s=handicap', 
          formdata={ 
           '__VIEWSTATE': 
response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
           'ctl11$ddlHistoryInMonths':'48', 
           '__EVENTTARGET': 
'ctl11$ddlHistoryInMonths', 
           '__EVENTVALIDATION' : 
response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
           'gaHandicap' : '6.5', 
           'golflink_No' : '2012003003', 
           '__VIEWSTATEGENERATOR' : 'CA0B0334', 
          }, 
          callback=self.parse_details) 

    def parse_details(self,response): 
     for name in response.css('div.rnd-course::text').extract(): 
      yield {'name' : name} 

答えて

1

はい、ASPページをこすりするのが難しいです。ほとんどの場合、少しのパラメータがありません。

これに対する解決策:

  1. 代わりscrapy.FormRequest.from_response()メソッドを使用scrapy.FormRequest(...)介して要求を作成する(以下のコード例を参照されたいです)。これにより、隠されたフォームデータのほとんどまたはすべてを取得し、それを使用してFormRequestのデータを事前入力します。

  2. 多分それはあまりにも...

  3. は、私の知る限り__VIEWSTATEGENERATORは、各時間を変更し、ページ

  4. から抽出する必要がありますリコールとして他の潜在的な問題だ、あなたは要求を返すのを忘れているようです
  5. これがうまくいかない場合は、FirebugプラグインまたはChromeの開発ツールを使用してFirefoxブラウザを起動し、ブラウザでリクエストを行い、要求の中の同じデータに対して完全なリクエストヘッダとボディデータを確認します。いくつかの違いがあります。すべての私の提案を

例コード:

def parse(self, response): 
    req = scrapy.FormRequest.from_response(response, 
         formdata={ 
     '__VIEWSTATE': response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
     'ctl11$ddlHistoryInMonths':'48', 
     '__EVENTTARGET': 'ctl11$ddlHistoryInMonths', 
     '__EVENTVALIDATION' : response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
     'gaHandicap' : '6.5', 
     'golflink_No' : '2012003003', 
     '__VIEWSTATEGENERATOR' : 'CA0B0334', 
         }, 
         callback=self.parse_details) 
    log.info(req.headers) 
    log.info(req.body) 
    return req 
+0

おかげで非常に多くの私が要求して、すべてを返された私の愚かな過ちを指し示すためによくおかげで働きました –

関連する問題