我想在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
答案 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_method
和body
参数:
import requests
requests.get('http://localhost:8050/render.html',
params={'url': 'http://httpbin.org/post',
'http_method': 'POST',
'body': 'a=b',
'wait': 2})
/render.html
也allows 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})