1.登录
爬取力扣上的数据首先需要进行登录,使用 Chrome 的开发者模式来确定登录时提交的信息。
经过登录验证,发现是通过 https://leetcode.com/accounts/login 这一接口提交了登录表单,使用爬虫进行登录的时候需要填写表单中对应的数据。其中 csrfmiddlewaretoken 是 cookie 值,需要登录后进行获取。
为了保持连接,可以使用 requests.Session()
方法,可以维持多个连接。登陆成功力扣会自动进行跳转,为了避免这一问题,可以在 post 方法中将 allow_redirects 设置为 Fasle 禁止跳转。
2.获取题目信息
https://leetcode.com/api/problems/all/ 接口是获取所有题目的接口。获取解析里面的数据便可以得到所有题的名称,但并不能获取题目的详细信息。而我们所需要的是详细的信息。
当点击一道题目时,分析所使用的请求,发现是一个 https://leetcode.com/graphql 的请求,返回了题目的详细信息。
GraphQL 是一种用于 API 的查询语言,查询方式类似于 SQL,对于该题请求为:
可以发现请求包含题目名称等信息,我们将对应题目的查询请求提交即可获得返回的题目详细信息。
3.获得正确代码
查看代码必须是在登录状态下,所以之前实现的登录是非常必要的。
可以使用 GraphQL 获取提交记录的简单信息,但是无法其中并不包含代码。
我们考虑通过 https://leetcode.com/submissions/detail/1/ 来获取代码,对页面分析发现这里并没有调用请求数据,查看页面的源代码,发现使用了一个pageData 的函数,代码应该是使用 JS 渲染而成,因此只能通过传统的获取页面源码正则解析的方式。代码被赋予到一个 submissionCode 的变量中去了,可以通过正则表达式获取该变量。
标签:创新,题目,登录,获取,实训,https,com,leetcode From: https://www.cnblogs.com/asuldb/p/18223083