表单搜索触发的隐藏API接口爬取数据缺失问题求助
网页爬取问题:API返回不完整数据的解决方案与疑问
问题背景
目标网站是一个内嵌表单的HTML页面,点击Search按钮后会加载学校列表,列表中的学校名称为可点击链接。通过开发者工具定位到了加载列表的API请求地址,但直接访问该地址返回的JSON数据仅包含少量基础字段,缺少所需的详细信息(如学校地址、联系方式、校长信息等)。尝试为请求添加模拟浏览器的请求头(包括Referer、X-Requested-With等)后,返回的数据仍无变化,关键字段均为null。
已尝试的代码
带自定义请求头的API请求代码
import requests def data_fetch(request_url, url_main): headers = { "Accept": '*/*', "Host": 'schoolinfo.leicester.gov.uk', "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', "Referer": url_main, "X-Requested-With": "XMLHttpRequest" } soup = requests.get(request_url, headers=headers).json() print(soup) def main(): request_url = "https://schoolinfo.leicester.gov.uk/api/schoolsearch/?schoolPhase=&schoolName=&pn=0&pa=900&schoolType=" url_main = "https://schoolinfo.leicester.gov.uk/DirectorySearch.html" data_fetch(request_url, url_main) if __name__ == "__main__": main()
直接获取接口返回内容的代码
from bs4 import BeautifulSoup import requests def url_parser(url): html_doc = requests.get(url).text soup = BeautifulSoup(html_doc, 'lxml') return soup url = "https://schoolinfo.leicester.gov.uk/api/schoolsearch/?schoolPhase=&schoolName=&pn=0&pa=900&schoolType=" print(url_parser(url))
当前输出结果
两段代码返回的内容完全一致,仅包含学校名称、BaseID、学校类型等少量有效字段,大部分关键信息字段均为null,示例片段如下:
[{"SchoolName":"Abbey Mead Primary Academy","BaseID":1,"SchoolType":"Academy","DfeNumber":null,"Ward":null,"RoleDesc":null,"Head":null,"Address":null,"Postcode":null,"BaseURL":null,"SchoolInspectionsURL":null,"SchoolReportsURL":null,"SchoolVacanciesURL":null,"Telephone":null,"Fax":null,"Email":null,"Sponsor":null,"UPRN":null,"SchoolPhase":"Primary","MapUrl":null,"AgeRange":null,"OverSubscribed":null,"ArrangementURL":null,"PAN":null},...]
后续尝试与问题
尝试通过BaseID拼接学校详情页的链接,随机测试发现页面显示学校总数为87,但BaseID存在不连续的情况(部分ID为13000+、100+等),无法通过简单的连续数值循环遍历获取所有学校的详情信息。
核心疑问
- 这种API仅返回基础数据,需要通过后续请求详情页获取完整信息的情况属于什么类型的问题?有没有对应的专业术语?
- 是否存在无需逐个爬取详情页,直接获取完整表格数据的方法?
内容的提问来源于stack exchange,提问作者theycallmepix
相关产品推荐
相关产品推荐

