Skip to main content

Fast HTML5 parser with CSS selectors.

Project description

selectolax logo

A fast HTML5 parser with CSS selectors using Modest and Lexbor engines.


From PyPI using pip:

pip install selectolax

Development version from GitHub:

git clone --recursive
cd selectolax
pip install -r requirements_dev.txt
python install

How to compile selectolax while developing:

make clean
make dev

Basic examples

In [1]: from selectolax.parser import HTMLParser
   ...: html = """
   ...: <h1 id="title" data-updated="20201101">Hi there</h1>
   ...: <div class="post">Lorem Ipsum is simply dummy text of the printing and typesetting industry. </div>
   ...: <div class="post">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
   ...: """
   ...: tree = HTMLParser(html)

In [2]: tree.css_first('h1#title').text()
Out[2]: 'Hi there'

In [3]: tree.css_first('h1#title').attributes
Out[3]: {'id': 'title', 'data-updated': '20201101'}

In [4]: [node.text() for node in tree.css('.post')]
['Lorem Ipsum is simply dummy text of the printing and typesetting industry. ',
 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.']
In [1]: html = "<div><p id=p1><p id=p2><p id=p3><a>link</a><p id=p4><p id=p5>text<p id=p6></div>"
   ...: selector = "div > :nth-child(2n+1):not(:has(a))"

In [2]: for node in HTMLParser(html).css(selector):
   ...:     print(node.attributes, node.text(), node.tag)
   ...:     print(node.parent.tag)
   ...:     print(node.html)
{'id': 'p1'}  p
<p id="p1"></p>
{'id': 'p5'} text p
<p id="p5">text</p>

Available backends

Selectolax supports two backends: Modest and Lexbor. By default, all examples use the Modest backend. Most of the features between backends are almost identical, but there are still some differences.

Currently, the Lexbor backend is in beta and missing some of the features.

To use lexbor, just import the parser and use it in the similar way to the HTMLParser.

In [1]: from selectolax.lexbor import LexborHTMLParser

In [2]: html = """
   ...: <title>Hi there</title>
   ...: <div id="updated">2021-08-15</div>
   ...: """

In [3]: parser = LexborHTMLParser(html)
In [4]: parser.root.css_first("#updated").text()
Out[4]: '2021-08-15'

Simple Benchmark

  • Extract title, links, scripts and a meta tag from main pages of top 754 domains. See examples/ for more information.
Package Time
Beautiful Soup (html.parser) 61.02 sec.
lxml 9.09 sec.
html5_parser 16.10 sec.
selectolax (Modest) 2.94 sec.
selectolax (Lexbor) 2.39 sec.


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

selectolax-0.3.8.tar.gz (2.8 MB view hashes)

Uploaded source

Built Distributions

selectolax-0.3.8-cp310-cp310-win_amd64.whl (1.9 MB view hashes)

Uploaded cp310

selectolax-0.3.8-cp310-cp310-win32.whl (1.8 MB view hashes)

Uploaded cp310

selectolax-0.3.8-cp39-cp39-win_amd64.whl (1.9 MB view hashes)

Uploaded cp39

selectolax-0.3.8-cp39-cp39-win32.whl (1.8 MB view hashes)

Uploaded cp39

selectolax-0.3.8-cp38-cp38-win_amd64.whl (1.9 MB view hashes)

Uploaded cp38

selectolax-0.3.8-cp38-cp38-win32.whl (1.8 MB view hashes)

Uploaded cp38

selectolax-0.3.8-cp37-cp37m-win_amd64.whl (1.9 MB view hashes)

Uploaded cp37

selectolax-0.3.8-cp37-cp37m-win32.whl (1.8 MB view hashes)

Uploaded cp37

selectolax-0.3.8-cp36-cp36m-win_amd64.whl (2.1 MB view hashes)

Uploaded cp36

selectolax-0.3.8-cp36-cp36m-win32.whl (2.0 MB view hashes)

Uploaded cp36

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page