网站爬取问题:提交POST请求后无法获取租车搜索结果
解决租车网站爬取无结果问题
问题排查与修复方向
1. 修正参数拼写错误
你提交的data里存在明显拼写错误:subimt_search应为submit_search,这个错误会导致服务器无法识别搜索提交指令,直接返回初始页面。
2. 完善请求头与会话状态
网站通常会验证请求合法性,需确保请求头包含必要字段,同时通过Session维持会话(先访问主页获取Cookie):
- 添加
User-Agent模拟真实浏览器请求 - 添加
Referer指定请求来源页面 - 先GET主页初始化会话,再提交POST搜索请求
3. 检查是否需要CSRF Token
部分网站会要求提交CSRF Token,可先从主页HTML中查找类似csrf-token的隐藏字段,提取后加入请求数据中。
修复后的代码示例
import requests from bs4 import BeautifulSoup # 目标URL search_url = 'https://www.rent-a-car-crete.gr/car-search/' home_url = 'https://www.rent-a-car-crete.gr' # 完善请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Referer': home_url } # 初始化会话 session = requests.Session() # 先访问主页获取Cookie和可能的CSRF Token home_res = session.get(home_url, headers=headers) soup_home = BeautifulSoup(home_res.content, 'html.parser') # 检查是否有CSRF Token,若有则添加到data中 # csrf_token = soup_home.find('input', {'name': 'csrf_token'}).get('value') # 修正后的请求数据 data = { 'pickup_location': '29', 'return_to_pickup_location': '1', 'return_location': '---', 'pickup': '21.02.2024', 'pickup_time': '10:00', 'return': '22.02.2024', 'return_time': '10:00', 'promo_code': '', 'age': '30+', 'pickup_id': '', 'return_id': '', 'submit_search': '1', # 修正拼写错误 # 'csrf_token': csrf_token # 如果网站要求则取消注释 } # 提交POST请求 res = session.post(search_url, headers=headers, data=data) soup = BeautifulSoup(res.content, 'html.parser') # 解析车辆信息 cars = soup.find_all('h3', class_='carname') print(f"找到车辆数量:{len(cars)}") for car in cars: print(car.get_text(strip=True))
额外提示
- 若仍无结果,可打开浏览器开发者工具,对比真实请求的所有参数和请求头,确保爬虫请求与浏览器请求完全一致
- 注意网站反爬策略,避免请求频率过高导致IP被封禁
内容的提问来源于stack exchange,提问作者виталик панасюк
相关产品推荐
相关产品推荐

