Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 Can';t在使用请求时模拟FormRequest.from_响应_Python_Python 3.x_Web Scraping_Python Requests_Scrapy - Fatal编程技术网

Python Can';t在使用请求时模拟FormRequest.from_响应

Python Can';t在使用请求时模拟FormRequest.from_响应,python,python-3.x,web-scraping,python-requests,scrapy,Python,Python 3.x,Web Scraping,Python Requests,Scrapy,我创建了两个脚本;一个使用requests模块,另一个使用scrapy。他们两人都干得干干净净。以下是如何在该站点中手动生成结果: 导航到此位置 将此地址2220 CLOVE TERR放在物业地址旁边,然后点击搜索按钮 从结果页面解析Block的值,即4759 由于\uuu VIEWSTATE是post请求中要发送的最重要参数之一,用于从任何以.aspx结尾的站点填充结果,因此我必须在第一个脚本中使用它来获得结果 然而,当我选择scrapy时,我仍然可以得到相同的结果,而不必显式地使用\uu V

我创建了两个脚本;一个使用requests模块,另一个使用scrapy。他们两人都干得干干净净。以下是如何在该站点中手动生成结果:

  • 导航到此位置
  • 将此地址
    2220 CLOVE TERR
    放在
    物业地址
    旁边,然后点击搜索按钮
  • 从结果页面解析
    Block
    的值,即
    4759
  • 由于
    \uuu VIEWSTATE
    是post请求中要发送的最重要参数之一,用于从任何以
    .aspx
    结尾的站点填充结果,因此我必须在第一个脚本中使用它来获得结果

    然而,当我选择scrapy时,我仍然可以得到相同的结果,而不必显式地使用
    \uu VIEWSTATE

    使用请求

    使用刮屑

    问题:在使用请求时,是否有任何方法可以模仿
    FormRequest.from\u response
    ,这样我就不需要在有效负载中提供
    \u VIEWSTATE
    来获取所需的内容


    您的scrapy解决方案可以工作,因为已经加载了表单字段,包括
    viewstate

    FromRequest.from_response(
                response,
                formdata=formdata,
                callback=self.parse_content
            )
    
    是否有以下情况:

  • 获取第一个(默认情况下)
    表单
    标记。()
  • 在找到的表单中-获取所有相关表单字段的有效负载数据(一个周期内的输入标签等) ()
    关于您的案例
    \uu VIEWSTATE
    此步骤结果中包含的数据
    formdata
    参数中的字段应用于新的有效负载
  • 获取表单url
  • 使用前面步骤的结果创建请求对象
  • 据我所知,这个库并没有任何类似的实现


    如果由于某种原因您不能使用scrapy,并且您需要此功能,您可能需要自己复制所有提到的步骤(提供指向scrapy代码相关部分的链接)。

    我不确定您到底想要什么。通过
    请求实现
    FromRequest.from_response()
    的功能?如果两个脚本都能正常工作,就像你说的那样,那么为什么你不选择一个你需要的版本呢?此外,由于这是一个工作代码示例,换句话说,确实没有明显的问题,您可能需要考虑将其发布。
    class RealpropertySpider(Spider):
        name = 'companies'
        start_url = 'https://cityservices.baltimorecity.gov/realproperty/default.aspx'
        
        search_address = '2220 CLOVE TERR'
    
        def start_requests(self):
            yield Request(self.start_url)
    
        def parse(self, response):
            key = 'ctl00$ctl00$rootMasterContent$LocalContentPlaceHolder${}'
            formdata = {
                key.format('txtAddress'): self.search_address,
                key.format('btnSearch'): 'Search'
            }
    
            yield FormRequest.from_response(
                response,
                formdata=formdata,
                callback=self.parse_content
            )
    
        def parse_content(self, response):
            block = response.xpath("//*[contains(@id,'_DataGrid1')]/tr[not(th)]/td/text()").get()
            yield {"Block":block}
    
    FromRequest.from_response(
                response,
                formdata=formdata,
                callback=self.parse_content
            )