2017-08-31 81 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中的第一个问题,它得到了完美的回答。不胜感激! –