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)

我希望这能回答你的问题,如果没有,请进一步说明你需要什么。