Python Can';t在使用请求时模拟FormRequest.from_响应
我创建了两个脚本;一个使用requests模块,另一个使用scrapy。他们两人都干得干干净净。以下是如何在该站点中手动生成结果: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
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
参数中的字段应用于新的有效负载如果由于某种原因您不能使用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
)