摘要
这篇文章主要介绍的是关于洛谷 API 的一些分析,方便后续爬虫等功能的编写。
接口抓取
前段时间我发现洛谷的 Fetch/XHR 请求中有一个类似 api 数据的返回值,于是尝试分析,但是由于后来洛谷貌似用后端动态往前端的 HTML 中插入数据的方式替换掉了 API 接口,无法继续分析。
一个正常的接口应当返回的是包含很多数据比如用户信息,页面信息,版本信息等等,由此,我们可以通过这些特征尝试识别那些是 API 接口。
格式
经过研究,发现大部分洛谷的网页可以通过添加 Header:x-lentille-request:content-only 来使得返回值是格式化好的数据,而不是需要我们自己解析的 HTML 界面。
以前洛谷支持添加 param:?_contentOnly 来获取数据,但是现在貌似取消了。
示例代码
import http.client
import json
conn = http.client.HTTPSConnection("www.luogu.com.cn")
payload = ''
headers = {
'x-lentille-request': 'content-only',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://www.luogu.com.cn/problem/list',
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Content-Type': 'application/json',
'Accept': '*/*',
'Host': 'www.luogu.com.cn',
'Connection': 'keep-alive'
}
conn.request("GET", "/user/602124", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))