我想完全根据Chrome检查器(网络标签页)中显示的XHR数据创建一个发布请求。目标是重新创建一个AJAX请求,转到动态显示的第4页。
我正在编程:
from requests import Session
session = requests.Session()
session.head('http://www.metrocuadrado.com/web/buscarFiltros/bogota-apartamento-venta')
payload = {...} #copied and pasted literally from the (previously inspected) source code of the XHR request
headersxhr = {...} #dictionary of all the headers found in the (previously inspected) source code of the XHR
response = session.post(
url = 'http://www.metrocuadrado.com/web/busqueda/pagina-4',
data = payload,
headers = headersxhr
)
print response.text
不幸的是,这给了我404错误。粘贴的有效负载很长,有很多嵌套的字典。它是这样开始的:
{“token”:“”,“cantidadResultadosPagina”:“16”,“filtrosJson”:“\ t \ t \ n \ t \ t {\”mnombreinmobiliaria \“:{\”nombre \“ :\“mnombreinmobiliaria \”,\“valor \”:[\“\”],\“valor2 \”:null,\“descripcion \”:\“NombreCompañia\”,\“tip #。 ....等等
我应该注意一个编码问题吗?
另外,我是否必须通过所有标题?
非常感谢!!
答案 0 :(得分:0)
1)filtrosJson
是随机生成的代码。这可以在第一页的源代码中找到。
我们首先需要使用您喜欢的任何方法来获取它,现在我正在使用bs4
2)有效负载在json中,因此我们必须使用json.dumps
发送post请求。
最后发送帖子请求,指出Content-Type
为application/json
我们可以做这样的事情,
import requests, json
from bs4 import BeautifulSoup as bs
s=requests.Session()
headers={"User-Agent":"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"}
s.headers.update(headers)
r=s.get("http://www.metrocuadrado.com/web/buscarFiltros/bogota-apartamento-venta")
soup=bs(r.content)
filtrosJson=soup.find(id="filtrosJson").text
data={"cantidadResultadosPagina": "16","filtroOrdenamiento": "-1","filtrosJson":filtrosJson,"token": ""}
r=s.post("http://www.metrocuadrado.com/web/busqueda/pagina-4",data=json.dumps(data),headers={"X-Requested-With":"XMLHttpRequest","Content-Type":"application/json"})
print r.json()
这适用于Python2.7,Ubuntu 14.04
如果您遇到任何问题,请告诉我们: - )