2017-08-31 115 views
2

這是我要刮的網頁: http://www.nalpdirectory.com/Page.cfm?PageID=34。我想模擬提交表單#resultDisplayOptionsForm與#customDisplayNum設置爲全部,這將帶給我一個網頁與所有列出的項目。scrapy無法提交表格

這是我的代碼片段:

def parse(self, response): 
    yield scrapy.FormRequest.from_response(
     response, 
     formid='resultDisplayOptionsForm', 
     formdata={'displayNum': '100000'}, #I tried 10, 20, 30 etc. none works 
     dont_click=True, 
     #clickdata={'id': 'customizeDisplaySubmitBtn'}, 
     callback=self.after_showAll 
    ) 
def after_showAll(self, response): 
    from scrapy.shell import inspect_response 
    inspect_response(response, self) 

當我檢查響應,它總是顯示失敗的頁面。歡迎任何建議。謝謝!

+0

我第一次檢查使用'dont_click'說法的人。 – eLRuLL

+0

「失敗的頁面」是什麼意思? – eLRuLL

回答

0

這裏的問題是,您錯過了實際獲取數據的POST請求。

如果你仔細檢查,形式的POST請求URL是this site,而「響應」,你要的是this site,所以可以確認缺少的東西。

你缺少執行的第三請求進入決賽現場,scrapy代碼,這將是這樣的:

def parse(self, response): 
    yield FormRequest.from_response(
     response, 
     formid='resultDisplayOptionsForm', 
     formdata={'displayNum': '100000000'}, # I tried 10, 20, 30 etc. none works 
     dont_click=True, 
     # clickdata={'id': 'customizeDisplaySubmitBtn'}, 
     callback=self.after_showAll 
    ) 

def after_showAll(self, response): 
    yield FormRequest(
     url='http://www.nalpdirectory.com/Page.cfm?PageID=34', 
     formdata={ 
      'currPage': '1', 
      'checkedFormID': '', 
     }, 
     callback=self.parse_real, 
    ) 

def parse_real(self, response): 
    from scrapy.shell import inspect_response 
    inspect_response(response, self) 
+0

謝謝你eLRuLL!這是我在StackOverflow中的第一個問題,它得到了完美的回答。不勝感激! –