NJSParser
A powerful parser and explorer for any website built with NextJS.
- Parses flight data (from the
self.__next_f.pushscripts). - Parses next data from
__NEXT_DATA__script. - Parses build manifests.
- Searches for build id.
- Many other things ...
It uses only lxml, orjson, pydantic to garantee a fast and efficient data parsing and processing.
Installation:
pip install njsparser
Use
CLI
You can use the cli from 3 different commands:
njspnjsparserpython3 -m njsparser.cliIt has only one functionality of displaying informations about the website, like this:For more informations, use the
--helpargument with the command.
Parsing __next_f.
The data you find in __next_f is called flight data, and contains data under react format. You can parse it easily with njsparser the way it follows.
We will build a parser for the flight data example
- In the website you want to parse, make sure you see the
self.__next_f.pushin the begining of script contained the data you search for. Here I am searching for the description"I should really have a better hobby, but this is it..."(in blue) in my page, and I can also see theself.__next_f.push(in green). - Then I will do this simple script, to parse, then dump the flight data of my website, and see what objects I am searching for:
import requests import njsparser import json # Here I get my page's html response = requests.get("https://mediux.pro/user/r3draid3r04").text # Then I parse it with njsparser fd = njsparser.BeautifulFD(response) # Then I will write to json the content of the flight data with open("fd.json", "w") as write: # I use the njsparser.default function to support the dump of the flight data objects. json.dump(fd, write, indent=4, default=njsparser.default)
- In my dumped flight data, I will search for the same string:
- Then I will do to the closed
"value"root to my found string, and look at the value of"cls". Here it is"Data": - Now that I know the
"cls"(class) of object my data is contained in, I can search for it in myBeautifulFDobject:import requests import njsparser import json # Here I get my page's html response = requests.get("https://mediux.pro/user/r3draid3r04").text # Then I parse it with njsparser fd = njsparser.BeautifulFD(response) # Then I iterate over the different classes `Data` in my flight data. for data in fd.find_iter([njsparser.T.Data]): # Then I make sure that the content of my data is not None, and # check if the key `"user"` is in the data's content. If it is, # then i break the loop of searching. if data.content is not None and "user" in data.content: break else: # If i didn't find it, i raise an error raise ValueError # Now i have the data of my user user = data.content["user"] # And I can print the string i was searching for before print(user["tagline"])
More informations:
- If your object is inside another object (e.g.
"Data"in a"DataParent", or in a"DataContainer"), the.find_iterwill also find it recursively (except if you setrecursive=False). - Make sure you use the correct flight data classes attributes when fetching their data. The class
"Data"has a.contentattribute. If you use.value, you will end up with the raw value and will have to parse it yourself. If you work with a"DataParent"object, instead of using.value(that will give you["$", "$L16", None, {"children": ["$", "$L17", None, {"profile": {}}]}]), use.children(that will give you a"Data"object with a.contentof{"profile": {}}). Check for the type file to see what classes you're interested in, and their attributes. - You can also use
.findonBeautifulFDto return the only first occurence of your query, or None if not found.
Parsing <script id='__NEXT_DATA__'>
Just do:
import njsparser
html_text = ...
data = njsparser.get_next_data(html_text)
If the page contains any script <script id='__NEXT_DATA__'>, it will return the json loaded data, otherwise will return None.
Metadata
Release files for njsparser 2.16
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| njsparser-2.16.tar.gz | 17.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| njsparser-2.16-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.7 kB
Release files / njsparser-2.16.tar.gz
| Download URL | njsparser-2.16.tar.gz |
|---|---|
| Size | 17.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
045539311507e5fe45031e51587516d075c4ae6ed0580644e51171968e6ca497
|
|
BLAKE2b-256 checksum How to use checksums |
3b1973d1d1ac2b979eb1354a00015a4147b7bb2bb4f09eb1b509dc02c482cccc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 6, 2026.
Transparency logRelease files / njsparser-2.16-py3-none-any.whl
| Download URL | njsparser-2.16-py3-none-any.whl |
|---|---|
| Size | 22.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8d49b958705e9503f91fca40b694e20e1f6db18bd88c85de12b623d112358d4b
|
|
BLAKE2b-256 checksum How to use checksums |
11b4f62d7609ec654811e796669c0973fdbd33efa7da2ecdc842d410ae62aac5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 6, 2026.
Transparency logSecurity for njsparser 2.16
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for njsparser-2.16.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.