Skip to main content

This package may be used to get the list of Leetcode questions and their topic and company tags, difficulty, question body (including test cases, constraints, hints), and code stubs in any of the available programming languages.

Project description

Leetcode Questions Scraper

Python application

This package may be used to get the list of Leetcode questions and their topic and company tags, difficulty, question body (including test cases, constraints, hints), and code stubs in any of the available programming languages.

Usage

Import the relevant classes from the leetcode package:

from leetscrape.GetQuestionsList import GetQuestionsList
from leetscrape.GetQuestionInfo import GetQuestionInfo
from leetscrape.utils import combine_list_and_info, get_all_questions_body

Get the list of questions, companies, topic tags, categories using the GetQuestionsList class:

ls = GetQuestionsList()
ls.scrape() # Scrape the list of questions
ls.to_csv(directory_path="../data/") # Save the scraped tables to a directory

Warning The default ALL_JSON_URL in the GetQuestionsList class might be out-of-date. Please update it by going to https://leetcode.com/problemset/all/ and exploring the Networks tab for a query returning all.json.

Query individual question's information such as the body, test cases, constraints, hints, code stubs, and company tags using the GetQuestionInfo class:

# This table can be generated using the previous commnd
questions_info = pd.read_csv("../data/questions.csv")

# Scrape question body
questions_body_list = get_all_questions_body(
    questions_info["titleSlug"].tolist(),
    questions_info["paidOnly"].tolist(),
    save_to="../data/questionBody.pickle",
)

# Save to a pandas dataframe
questions_body = pd.DataFrame(
    questions_body_list
).drop(columns=["titleSlug"])
questions_body["QID"] = questions_body["QID"].astype(int)

Note The above code stub is time consuming (10+ minutes) since there are 2500+ questions.

Create a new dataframe with all the questions and their metadata and body information.

questions = combine_list_and_info(
    info_df = questions_body, list_df=ls.questions, save_to="../data/all.json"
)

Create a PostgreSQL database using the SQL dump and insert data using sqlalchemy.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("<database_connection_string>", echo=True)
questions.to_sql(con=engine, name="questions", if_exists="append", index=False)
# Repeat the same for tables ls.topicTags, ls.categories,
# ls.companies, # ls.questionTopics, and ls.questionCategory

Use the queried_questions_list PostgreSQL function (defined in the SQL dump) to query for questions containy query terms:

select * from queried_questions_list('<query term>');

Use the all_questions_list PostgreSQL function (defined in the SQL dump) to query for all the questions in the database:

select * from all_questions_list();

Use the get_similar_questions PostgreSQL function (defined in the SQL dump) to query for all questions similar to a given question:

select * from get_similar_questions(<QuestionID>);

Use the extract_solutions method to extract solution code stubs from your python script. Note that the solution method should be a part of a class named Solution (see here for an example):

# Returns a dict of the form {QuestionID: solutions}
solutions = extract_solutions(filename=<path_to_python_script>)

Use the upload_solutions method to upload the extracted solution code stubs from your python script to the PosgreSQL database.

upload_solutions(engine=<sqlalchemy_engine>, row_id = <row_id_in_table>, solutions: <solutions_dict>)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

leetscrape-0.1.1.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

leetscrape-0.1.1-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file leetscrape-0.1.1.tar.gz.

File metadata

  • Download URL: leetscrape-0.1.1.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.7 Windows/10

File hashes

Hashes for leetscrape-0.1.1.tar.gz
Algorithm Hash digest
SHA256 f25b2e682b1f3ebb39a1b522f44056d9afa95bfa4abc9f6c5cb78c4265a1e228
MD5 d8c3741ff1c3e148ab23aa3fbfcdb7f3
BLAKE2b-256 d29d139322da8b433b719a6cc7eecfbbb319fbb0762dd3c9fd76bd0c02e651e0

See more details on using hashes here.

File details

Details for the file leetscrape-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: leetscrape-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.10.7 Windows/10

File hashes

Hashes for leetscrape-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0aae21842ffe018b1328002b2122310ee10fd4bdd9a97331b3c6b12f5240a499
MD5 b0f630c8b4fbe10f3c9dbab618eea862
BLAKE2b-256 e8535cbdd6c453cf6f038e876907c5cea53159cc79ffad82cf2f563a35e0274b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page