使用Python requests请求idealista接口返回403的问题求助
解决Idealista接口请求403(Datadome验证码拦截)问题
Idealista采用Datadome反爬系统,直接用标准requests库请求会被识别为非浏览器请求,触发403和验证码拦截——哪怕你复制了浏览器的headers和cookie,因为Datadome会校验请求的TLS握手指纹、请求顺序等细节,requests的默认行为和浏览器差异明显。
可行方案:模拟浏览器指纹请求
使用curl_cffi库(基于libcurl,能精准模拟不同浏览器的TLS指纹和请求行为),无需依赖浏览器即可绕过Datadome检测。
步骤及代码示例
- 安装依赖:
pip install curl_cffi
- 编写请求代码:
from curl_cffi import requests # 目标接口URL target_url = "https://www.idealista.com/ajax/listingcontroller/listingmapajaxgrouped.ajax?locationUri=madrid-provincia&typology=1&operation=1&freeText=&zoom=15&northEast=40.89556712488649%2C+-3.520630650041847&southWest=40.879864357074844%2C+-3.5899389309866714&uid=k4v5h8vbht9inrlfqrvq3bybmaefj7mhcdfhlpg0dk9&adfilter_pricemin=default&adfilter_price=default&adfilter_area=default&adfilter_areamax=default&adfilter_villalabel=&adfilter_apartment=&adfilter_loft=&adfilter_casabaja=&adfilter_stonehouse=&adfilter_atticstudio=&adfilter_rooms_0=&adfilter_rooms_1=&adfilter_rooms_2=&adfilter_rooms_3=&adfilter_rooms_4_more=&adfilter_baths_1=&adfilter_baths_2=&adfilter_baths_3=&adfilter_newconstruction=&adfilter_goodcondition=&adfilter_toberestored=&adfilter_hasairconditioning=&adfilter_wardrobes=&adfilter_lift=&adfilter_flatlocation=&adfilter_parkingspace=&adfilter_garden=&adfilter_swimmingpool=&adfilter_hasterrace=&adfilter_boxroom=&adfilter_accessibleHousing=&adfilter_luxury=&adfilter_top_floor=&adfilter_intermediate_floor=&adfilter_ground_floor=&adfilter_hasplan=&adfilter_digitalvisit=&adfilter_agencyisabank=&adfilter_published=default&adfilter_onlyflats=&adfilter_penthouse=&adfilter_duplex=&adfilter_homes=&adfilter_independent=&adfilter_semidetached=&adfilter_terraced=&adfilter_countryhouses=&adfilter_chalets=&device=desktop" # 模拟Chrome浏览器请求,维持会话 session = requests.Session() # 先访问主页获取初始cookie,模拟真实访问流程 session.get("https://www.idealista.com", impersonate="chrome110") # 请求目标接口,带上浏览器指纹 response = session.get(target_url, impersonate="chrome110", headers={ 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'accept-language': 'es-ES,es;q=0.9', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36' }) # 打印响应内容 print(response.text)
关键说明
impersonate="chrome110"参数会让请求模拟Chrome 110的TLS指纹和请求头特征,匹配Datadome的校验标准。- 先访问主页是为了获取Idealista和Datadome的初始cookie,模拟用户正常的访问路径。
- 避免短时间内频繁请求,否则依然会触发IP封禁。
内容的提问来源于stack exchange,提问作者P00LR0CK
相关产品推荐
相关产品推荐

