Scrapy Post 带负载的请求
Scrapy Post Request with payload
我正在尝试抓取一个网站,在那里我可以找到 url 有一个 post 请求,其有效负载参数如下。我不确定如何将它放入有效负载中的字典并将其发送到表单数据中。以下所有代码都在 Request with payload
我如何在表单数据中发送这个?
callCount=1
page=/job.do?uno=auo&internal=1
httpSessionId=724D68422B64D786F28E57EB3EE9D07D.newweb04
scriptSessionId=D0E5AF56ACF10360C6B960329CBB012B883
c0-scriptName=normalAjaxService
c0-methodName=getJobDetailByCustId
c0-id=0
c0-param0=number:1000000157
c0-param1=number:551740849947131
batchId=2
这就是我尝试发送表单数据的方式,但我没有收到任何回复
formdata_2 = {
'callCount': '1',
'page': '/job.do?uno=auo&internal=1',
'httpSessionId': '724D68422B64D786F28E57EB3EE9D07D.newweb04',
'scriptSessionId': session_id,
'c0-scriptName': 'normalAjaxService',
'c0-methodName': 'searchJobs',
'c0-id': '0',
'c0-param0=number': '1000000157',
'c0-param1=string': '',
'c0-param2=string': '0',
'c0-param3=string': '0',
'c0-param4=number': '0',
'c0-param5=string': 'i88ky1c0',
'batchId': '0',
}
我不完全确定我是否正确理解了你的问题,但如果这是你在抓取网站某处找到的文本,并且想将其格式化为有效的请求以抓取新网站,你可以将其转换为字典如下:
# assume that you got that text inside a variable
scraped = """
callCount=1
page=/job.do?uno=auo&internal=1
httpSessionId=724D68422B64D786F28E57EB3EE9D07D.newweb04
scriptSessionId=D0E5AF56ACF10360C6B960329CBB012B883
c0-scriptName=normalAjaxService
c0-methodName=getJobDetailByCustId
c0-id=0
c0-param0=number:1000000157
c0-param1=number:551740849947131
batchId=2
"""
param_list = [line.split('=', 1) for line in scraped.split('\n')]
formdata = {p[0]:p[1] for p in param_list}
现在您的表单数据已保存在字典中。如果您要访问的页面是表单数据中的 page
参数,您可以使用它并使用 urlparse
创建绝对 URL (假设这是从回调函数内部调用的,你有 response
可用的地方:
page = urlparse.urljoin(response.url, formdata.pop('page'))
现在您可以在 link 后面加上适当的表单数据:
return scrapy.Request(page, formdata=formdata)
我希望这能回答你的问题,如果没有,请进一步说明你需要什么。
我正在尝试抓取一个网站,在那里我可以找到 url 有一个 post 请求,其有效负载参数如下。我不确定如何将它放入有效负载中的字典并将其发送到表单数据中。以下所有代码都在 Request with payload
我如何在表单数据中发送这个?
callCount=1
page=/job.do?uno=auo&internal=1
httpSessionId=724D68422B64D786F28E57EB3EE9D07D.newweb04
scriptSessionId=D0E5AF56ACF10360C6B960329CBB012B883
c0-scriptName=normalAjaxService
c0-methodName=getJobDetailByCustId
c0-id=0
c0-param0=number:1000000157
c0-param1=number:551740849947131
batchId=2
这就是我尝试发送表单数据的方式,但我没有收到任何回复
formdata_2 = {
'callCount': '1',
'page': '/job.do?uno=auo&internal=1',
'httpSessionId': '724D68422B64D786F28E57EB3EE9D07D.newweb04',
'scriptSessionId': session_id,
'c0-scriptName': 'normalAjaxService',
'c0-methodName': 'searchJobs',
'c0-id': '0',
'c0-param0=number': '1000000157',
'c0-param1=string': '',
'c0-param2=string': '0',
'c0-param3=string': '0',
'c0-param4=number': '0',
'c0-param5=string': 'i88ky1c0',
'batchId': '0',
}
我不完全确定我是否正确理解了你的问题,但如果这是你在抓取网站某处找到的文本,并且想将其格式化为有效的请求以抓取新网站,你可以将其转换为字典如下:
# assume that you got that text inside a variable
scraped = """
callCount=1
page=/job.do?uno=auo&internal=1
httpSessionId=724D68422B64D786F28E57EB3EE9D07D.newweb04
scriptSessionId=D0E5AF56ACF10360C6B960329CBB012B883
c0-scriptName=normalAjaxService
c0-methodName=getJobDetailByCustId
c0-id=0
c0-param0=number:1000000157
c0-param1=number:551740849947131
batchId=2
"""
param_list = [line.split('=', 1) for line in scraped.split('\n')]
formdata = {p[0]:p[1] for p in param_list}
现在您的表单数据已保存在字典中。如果您要访问的页面是表单数据中的 page
参数,您可以使用它并使用 urlparse
创建绝对 URL (假设这是从回调函数内部调用的,你有 response
可用的地方:
page = urlparse.urljoin(response.url, formdata.pop('page'))
现在您可以在 link 后面加上适当的表单数据:
return scrapy.Request(page, formdata=formdata)
我希望这能回答你的问题,如果没有,请进一步说明你需要什么。