如何使用Splash与python请求?

时间:2016-05-06 09:11:24

标签: python-2.7 scrapy python-requests splash scrapyjs

我想在requests中使用splash,就像这样

requests.post(myUrl,headers=myHeaders, data=payload, meta={
                                        'splash': {
                                            'endpoint': 'render.html',
                                            'args': {'wait': 1}
                                            }
                                        })

但我有这个错误

TypeError: request() got an unexpected keyword argument 'meta'

我知道这可以用 scrapy.Request 进行,但我想用requests

1 个答案:

答案 0 :(得分:7)

meta是Scrapy Request - 具体且python-requests' request没有meta参数,因此TypeError例外。

要将Splash与python请求一起使用,请阅读HTTP API docs, especially on render.html,因为这就是您想要使用的内容。

您需要向/render.html端点发送GET请求,并将目标网址和wait参数作为查询参数传递,例如像这样:

import requests
requests.get('http://localhost:8050/render.html',
             params={'url': 'http://www.example.com', 'wait': 2})

如果您希望Splash向目标网站发出POST请求,请使用http_methodbody参数:

import requests
requests.get('http://localhost:8050/render.html',
              params={'url': 'http://httpbin.org/post',
                      'http_method': 'POST',
                      'body': 'a=b',
                      'wait': 2})

/render.htmlallows POST-ed requests to the endpoint

  

通过HTTP API控制Splash。对于以下所有端点,参数可以作为GET参数发送,也可以编码为JSON,并使用Content-Type: application/json标题进行发布。

但默认方法仍然是GET。要对目标网站执行POST,您仍需要包含http_method参数:

import requests

requests.post('http://localhost:8050/render.html',
              json={'url': 'http://httpbin.org/post',
                    'http_method': 'POST',
                    'body': 'a=b',
                    'wait': 2})