Python POST请求后没有内容

Python POST请求后没有内容,python,python-3.x,web-scraping,python-requests,Python,Python 3.x,Web Scraping,Python Requests,我正在尝试删除此网站: 当您从第一个菜单选择Alicante,然后从第二个菜单选择Ayuntamiento de Abengibre时,您将看到一个包含结果的表格。这就是我想要的 我在Chrome控制台中看到,在下拉列表中选择值会生成POST请求。因此,我认为通过请求来获得这一点很简单。post params = { "consulta_alcalde[_csrf_token]":"dd1546dd35bf0f1af4a1f3aac165a1b5", "consulta_alca

我正在尝试删除此网站:

当您从第一个菜单选择Alicante,然后从第二个菜单选择Ayuntamiento de Abengibre时,您将看到一个包含结果的表格。这就是我想要的

我在Chrome控制台中看到,在下拉列表中选择值会生成POST请求。因此,我认为通过
请求来获得这一点很简单。post

params = {
    "consulta_alcalde[_csrf_token]":"dd1546dd35bf0f1af4a1f3aac165a1b5",
    "consulta_alcalde[id_provincia]":"2",
    "consulta_alcalde[id_entidad]":"17926"  
    }


r = requests.post("https://ssweb.seap.minhap.es/portalEELL/consulta_alcaldes", params)
但当我检查r.text包含的内容时,我得到了200个响应,但无法从表中看到我的数据。我做错了什么

我知道可以用硒来做,但我正试图避免它,因为它非常慢

编辑:

根据Brian的建议,我已将代码修改为:

params = {
   "consulta_alcalde[_csrf_token]":"dd1546dd35bf0f1af4a1f3aac165a1b5",
   "consulta_alcalde[id_provincia]":"2",
   "consulta_alcalde[id_entidad]":"17951",
   "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
   }

with requests.Session() as s:
    s.get("https://ssweb.seap.minhap.es/portalEELL/consulta_alcaldes")
    r = s.post("https://ssweb.seap.minhap.es/portalEELL/consulta_alcaldes", data=params)

但是仍然没有运气…

对于post请求,有效负载应该是请求的主体。为此,请使用data关键字参数传递参数

requests.post(url, data=payload)
如果post需要json,那么您可以使用
json.dumps
,或者只是将负载传递给json关键字参数

requests.post(url, json=payload)
“csrf_令牌”不是静态的,您必须使用
bs4
解析页面才能获得它。
该站点还通过xhr请求提供内容,因此您需要在标题中包含“XMLHttpRequest”。代码:

url = 'https://ssweb.seap.minhap.es/portalEELL/consulta_alcaldes'
s = requests.Session()
r = s.get(url, verify=False)
soup = BeautifulSoup(r.content, 'html.parser')
csrf_token = soup.find('input', id="consulta_alcalde__csrf_token")['value']
data = {
    "consulta_alcalde[_csrf_token]":csrf_token,
    "consulta_alcalde[id_provincia]":"2",
    "consulta_alcalde[id_entidad]":"17951"
}
headers = {"X-Requested-With":"XMLHttpRequest"}
r = s.post(url, data=data, headers=headers, verify=False)
print(r.content)

不幸的是,这给出了同样的结果。正如上面randomir建议的,我可能缺少一些身份验证参数。感谢您站点是否需要身份验证(例如用户名/密码)?其次,如果只是一个会话cookies的问题,请使用一个请求会话并执行一个<代码>会话。将获取到主URL(这将填充所有会话头等),后面跟着您的<代码>会话。POST 。通常情况下,模拟浏览器用户代理效果很好。不,它不需要身份验证。尝试会话是个好主意。这是我需要的解决方案!谢谢!