npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

rl-html-parser

v1.0.0

Published

Parser for HTML pages

Readme

rl-html-parser

Node.js module for parsing HTML pages

Installing

npm install rl-html-parser

Usage examples

Use of Class instance

import HtmlParser from 'rl-html-parser';

// selectors you need to be found on the pages
const selectors = {
    // examples: div#id, div.class, div#id.class.class, div[attr=value], div > p, etc.
    // For now it can only be one level of tag nesting (parent > child)
    links: 'div[href^=http]' // note: attribute value must be without quotes
};

// array of pages where selectors to be found
const pages = ['https://github.com'];

const parser = new HtmlParser(selectors, pages);

// if you only need values of an element matches the selector
// values as inner html inside the tag of an element
parser.values()
    .then(result => console.log(result.links))
    .catch(error => cosole.log(error));

// if you need values of specific attribute
parser.attrValues('href')
    .then(result => console.log(result.links))
    .catch(error => console.log(error));

// then you can change params for a search
parser
    .setSelectors({titles: 'h2 > span#History.mw-headline'})
    .setLinks(['https://en.wikipedia.org/wiki/HTML'])
    .attrValues('id')
    .then(result => console.log(result.titles)) // [History]
    .catch(error => console.log(error));

Static use

If we want to do a fast and simple request for target data, we may use a static method:

(async () => {
    // but in this case you will get all the data about the tag, including its attributes and values 
    const data = await HtmlParser.parse({links: 'div[href^=http]'}, 'https://github.com');
    console.log(data[0].id);
    console.log(data[0].class);
    console.log(data[0].tagName);
    console.log(data[0].href)
    console.log(data[0].value); // inner html inside the tag
})()