Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 已损坏的FormRequest与Scrapy_Python_Scrapy - Fatal编程技术网

Python 已损坏的FormRequest与Scrapy

Python 已损坏的FormRequest与Scrapy,python,scrapy,Python,Scrapy,我从一个简单的请求开始,当我得到回调时,pre_结果在本例中,我想向表单发送x个POST请求,以获取所有可能的信息。当我发送请求时,它每次都发送相同的请求 我知道url是正确的,值是正确的。看起来for循环以某种方式破坏了请求。难道不能从scrapy中的自定义解析方法发送多个FormRequests吗?我试过延迟10秒,但仍然没有成功 def pre_results(self, response): hxs = HtmlXPathSelector(response) log.ms

我从一个简单的请求开始,当我得到回调时,pre_结果在本例中,我想向表单发送x个POST请求,以获取所有可能的信息。当我发送请求时,它每次都发送相同的请求

我知道url是正确的,值是正确的。看起来for循环以某种方式破坏了请求。难道不能从scrapy中的自定义解析方法发送多个FormRequests吗?我试过延迟10秒,但仍然没有成功

def pre_results(self, response):
    hxs = HtmlXPathSelector(response)
    log.msg("Refining results with number %d and url %s" % (response.meta['item']['number'], response.url), log.INFO)
    minurl = response.url.replace("results", "refine_results")
    requests = []
    for value in hxs.select('//select[@id="profile_electricity_plan_type"]/option/@value').extract():
    request = FormRequest(url=minurl,
                          formdata={'profile[electricity_plan_type]' : value}, #This value is correct
                          callback=self.step_results,
                          dont_filter=True) # To be able to send to the same URL
        request.meta['item'] = response.meta['item']
        request.meta['item']['company'] = value
        yield request
如果有人有意见,我非常感谢。 谢谢

编辑:
它发送X个请求,其值与它迭代的值中的最后一个值相同。至少当它点击self.step_results时,结果都是一样的。

您确定在循环中得到了不同的值吗?另外,在访问response.meta['item']['company']时,您是否在step_results方法中看到不同的值?这是奇怪的部分。我已经在循环中记录了这些值,它有正确的值。我甚至成功地记录了request.meta['item']['company']。当响应出现在self.step_结果中时,它们都具有相同的值。好的,那么您如何检查self.step_结果中的值?就像您所说的那样。请您注释掉request.meta['item']=response.meta['item']并用request.meta['test']=value替换request.meta['item'['company']=value和request.meta['test'=value?执行print response.meta['test']时,查看步骤_结果中打印的内容?