带有效负载的Scrapy Post Request

时间:2015-04-08 06:44:03

标签: python web-scraping scrapy

我正在尝试抓取一个网站,我可以发现该网址有一个带有效载荷参数的帖子请求,如下所示。我不知道如何使它成为有效载荷中的字典并将其发送到formdata。以下所有代码都在Request with payload下,如何在formdata中发送?

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的方式,我没有收到回复

            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',
        }

1 个答案:

答案 0 :(得分:2)

我并不完全确定我是否正确理解了您的问题,但如果这是您在已删除网站上找到的文本,并希望将其格式化为有效的请求来抓取新网站,则可以把它变成一个字典如下:

# 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创建apsolute URL(假设这是从回调函数内部调用的,您可以在其中{ {1}}可用:

response

现在,您可以使用相应的表单数据链接:

page = urlparse.urljoin(response.url, formdata.pop('page'))

我希望这能回答你的问题,如果没有,请进一步解释你的需求。