JOURNAL ENTRY

关于洛谷api的分析

摘要

这篇文章主要介绍的是关于洛谷 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"))

继续阅读

评论 (0)

取消