如何构造正确的GET URL获取Untappd页面更多菜单的JSON数据?
正确构造请求的方法
首先纠正你参数对应错误的问题:
- JS里的
t对应按钮的data-venue-id,也就是469603 - JS里的
n是当前页面已加载的.section-area .menu-section元素数量,初始时如果已经有1个,那第一次请求就是1 - JS里的
a对应按钮的data-menu-id,也就是78074484
根据你提供的AJAX代码,正确的GET请求URL应该是:
https://untappd.com/venue/more_menu_section/469603/1?menu_id=78074484
关键注意点:
- 不要用
data=包裹JSON,直接把menu_id作为普通GET参数传递——JS里的data: "menu_id=" + a就是直接拼接成GET参数,不是JSON格式。 n的值是动态的:每次点击"Show More"后,页面会新增menu-section,下一次请求的n要改成当前已加载的数量(比如第一次请求后如果新增了15个,那下一次n就是1+15=16)。- 请求需要带上Untappd的Cookie和请求头(比如
User-Agent),否则可能被反爬拦截。用requests的话,可以先请求原页面获取Cookie,再发起这个AJAX请求。
示例Python代码片段:
import requests from bs4 import BeautifulSoup base_url = "https://untappd.com/v/southern-cross-kitchen/469603" session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" }) # 先请求原页面获取Cookie和初始menu-section数量 response = session.get(base_url) soup = BeautifulSoup(response.text, "html.parser") initial_section_count = len(soup.select(".section-area .menu-section")) venue_id = "469603" menu_id = "78074484" # 构造请求URL ajax_url = f"https://untappd.com/venue/more_menu_section/{venue_id}/{initial_section_count}" params = {"menu_id": menu_id} # 发起AJAX请求 ajax_response = session.get(ajax_url, params=params) if ajax_response.status_code == 200: data = ajax_response.json() # 处理返回的HTML片段 more_html = data.get("view") # 用BeautifulSoup解析新增内容 more_soup = BeautifulSoup(more_html, "html.parser") # 提取需要的信息 print(more_soup.prettify()) else: print(f"请求失败,状态码:{ajax_response.status_code}")
内容的提问来源于stack exchange,提问作者Tendekai Muchenje
相关产品推荐
相关产品推荐

