这是我要抓取的网页:
http://www.nalpdirectory.com/Page.cfm?PageID=34。我想模拟提交表单resultDisplayOptionsForm,将customDisplayNum设置为All,这将为我带来一个包含所有列出项目的网页。
这是我的代码片段:

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)

当我检查响应时,它总是显示一个失败的页面。欢迎提出任何建议。谢谢您!

最佳答案

这里的问题是您缺少获取数据的实际POST请求。
如果您仔细检查,表单的POST请求url是this site,而您想要的“响应”是this site,因此您可以在那里确认丢失了某些内容。
您缺少在最终站点中执行第三个请求的功能,代码不完整,如下所示:

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)

关于python - 拼凑无法提交表格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45990976/

10-12 04:51