Web Scraping问题:发送POST请求时出现404 Not Found错误
解决POST请求返回404的问题
核心问题分析
你遇到的404错误主要源于两个关键点:
- POST目标URL错误:你将请求发送到了页面展示的URL(
horarios.html),但网站表单实际提交的目标是后端处理接口,而非这个页面地址。 - 缺少必要请求头:服务器会验证请求是否来自合法浏览器,缺失关键头信息会被判定为非法请求,返回错误。
修复步骤
确认正确的POST接口
打开浏览器开发者工具(F12)切换到「网络」标签,手动在网站提交一次搜索,找到类型为POST的请求,查看它的真实请求URL。该网站的表单实际提交地址大概率是https://www.ssa.ingenieria.unam.mx/horarios(去掉.html后缀)。添加必要请求头
至少需要添加User-Agent模拟浏览器请求,可额外加上Referer表明请求来源页面,降低被拦截的概率。验证表单参数完整性
检查开发者工具里的表单数据,确保payload包含所有提交参数,比如是否有隐藏字段需要一并发送。
修正后的代码
import requests # 注意:此处为表单实际提交的后端接口URL,而非页面展示URL url = "https://www.ssa.ingenieria.unam.mx/horarios" def get_html_response(clave): # 添加模拟浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://www.ssa.ingenieria.unam.mx/horarios.html' } payload = { 'optHorarioAsignatura': 'clave', 'clave': clave } # 发送POST请求时携带请求头 response = requests.post(url, data=payload, headers=headers) return response.text # 测试调用 print(get_html_response("1858"))
额外提示
- 如果问题仍存在,检查开发者工具中的请求方法(确认是POST)、编码方式(
application/x-www-form-urlencoded为requests默认格式,无需修改)。 - 部分网站会要求CSRF令牌,若表单中存在
csrf_token类隐藏字段,需先GET页面提取令牌,再加入payload一同提交。
内容的提问来源于stack exchange,提问作者Carlos Odette DLCL
相关产品推荐
相关产品推荐

