crawlbaseДокументация
Войти
Задача дня возвращается дополнительной строкой

LeetCode закрепляет задачу дня над постраничной таблицей, поэтому полная страница возвращает на одну запись больше размера страницы - сначала закреплённую задачу, затем строки таблицы. Это единственная запись, у которой isDailyQuestion равно true, так что её легко отбросить, если нужна только таблица.

Использование API

Добавьте &scraper=leetcode-serp к запросу Crawling API. Целевой URL передавайте в параметре url в URL-кодировке.

curl 'https://api.crawlbase.com/?token=YOUR_TOKEN' \
  --data-urlencode 'url=https://leetcode.com/problemset/' \
  --data-urlencode 'scraper=leetcode-serp' -G
from crawlbase import CrawlingAPI

api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get(
    'https://leetcode.com/problemset/',
    {'scraper': 'leetcode-serp'}
)

import json
data = json.loads(res['body'])
const { CrawlingAPI } = require('crawlbase');
const api = new CrawlingAPI({ token: 'YOUR_TOKEN' });

const res = await api.get(
  'https://leetcode.com/problemset/',
  { scraper: 'leetcode-serp' }
);
const data = JSON.parse(res.body);
require 'crawlbase'
api = Crawlbase::API.new(token: 'YOUR_TOKEN')

res = api.get('https://leetcode.com/problemset/', scraper: 'leetcode-serp')
data = JSON.parse(res.body)

Пример входного URL

В параметре url работает любой список задач LeetCode - нефильтрованный список по адресу /problemset/ или отфильтрованное представление. Например:

https://leetcode.com/problemset/
https://leetcode.com/problemset/?difficulty=EASY
https://leetcode.com/problemset/?topicSlugs=dynamic-programming

Структура ответа

Тело JSON-ответа. Типы полей могут быть null, если исходная страница не содержит значения.

url
string
URL обработанного списка задач.
totalProblems
integer | null
Общее число задач, которое LeetCode показывает для текущего фильтра по всем страницам.
problemCount
integer
Число записей, возвращённых в problems для этой страницы.
problems
array
Строки задач, найденные на странице, в порядке их отображения.
problems[].id
string | null
Номер задачи, как показан в списке, возвращается строкой.
problems[].title
string | null
Отображаемое название задачи.
problems[].titleSlug
string | null
URL-слаг задачи, по которому можно построить любой другой URL задачи LeetCode.
problems[].url
string | null
Абсолютный URL страницы задачи.
problems[].difficulty
string | null
Метка сложности - Easy, Medium или Hard.
problems[].acceptanceRate
string | null
Доля принятых решений, как показана, вместе со знаком процента.
problems[].isPremium
boolean
Требует ли задача подписки LeetCode.
problems[].isDailyQuestion
boolean
Является ли эта строка закреплённой задачей дня.

Пример ответа

{
  "url": "https://leetcode.com/problemset/",
  "totalProblems": 4013,
  "problemCount": 101,
  "problems": [
    {
      "id": "3626",
      "title": "Smallest Divisible Digit Product I",
      "titleSlug": "smallest-divisible-digit-product-i",
      "url": "https://leetcode.com/problems/smallest-divisible-digit-product-i",
      "difficulty": "Easy",
      "acceptanceRate": "71.0%",
      "isPremium": false,
      "isDailyQuestion": true
    },
    {
      "id": "1",
      "title": "Two Sum",
      "titleSlug": "two-sum",
      "url": "https://leetcode.com/problems/two-sum",
      "difficulty": "Easy",
      "acceptanceRate": "57.9%",
      "isPremium": false,
      "isDailyQuestion": false
    },
    {
      "id": "2",
      "title": "Add Two Numbers",
      "titleSlug": "add-two-numbers",
      "url": "https://leetcode.com/problems/add-two-numbers",
      "difficulty": "Medium",
      "acceptanceRate": "49.1%",
      "isPremium": false,
      "isDailyQuestion": false
    }
  ]
}