Skip to main content

Python HTML/XML parser for easy web scraping.

Project description

https://badge.fury.io/py/DHTMLParser3.svg https://img.shields.io/pypi/dm/dhtmlparser3.svg https://readthedocs.org/projects/dhtmlparser3/badge/?version=latest https://img.shields.io/github/issues/Bystroushaak/dhtmlparser3.svg https://img.shields.io/pypi/l/dhtmlparser3.svg https://img.shields.io/github/sponsors/Bystroushaak

What is it?

DHTMLParser3 is a lightweight HTML/XML parser created for one purpose - quick and easy picking selected tags from DOM.

It can be very useful when you are in need to write own “guerilla” API for some webpage, or a scrapper.

It is written in pure python with no dependencies, and it can handle pretty badly broken HTML.

Documentation

Full module documentation can be found here: http://DHTMLParser3.rtfd.org

Changelog

3.0.17

  • Fixed problem with empty strings in Tokenizer.

3.0.16

  • Changed behavior of the .remove_item() method to compare using identity.

3.0.15

  • Added new method parse_file() method to simplify working with files.

3.0.14

  • Fixed problem with tokenizer & nonpair tags without spaces.

3.0.13

  • Fixed problem with re-ordering of the parameters when setting them.

3.0.12

  • Added conditional escape parameter to .content_str() method.

3.0.11

  • Fixed parent problem with .__deepcopy__().

3.0.10

  • Implemented proper .__copy__() and .__deepcopy__() methods.

3.0.9

  • Fixed the way how the quotes are escaped in the tag parameters.

3.0.8

  • Fixed behavior of the .__hash__() method for nested tags.

3.0.7

  • Don’t escape <script> and <style> content’s.

3.0.6

  • Fixed behavior of .match() method.

  • Added new method .match_paths().

  • Added tests.

3.0.5

  • Bugfix; SpecialDict.copy() didn’t return any value.

3.0.4

  • Bugfix; Don’t search empty tags.

3.0.3

  • Bugfix; Always return container element for small doms with only strings inside.

3.0.2

  • Added .__hash__() method for Tag.

  • .replace_with() method now accepts str as well as Tag.

  • Fixed problems with .parent setting for non-pair tags in the parser.

  • Added bunch of tests to test newly added stuff.

3.0.1

  • Added .__contains__() method for Tag, so you can now test parameters using in operator.

3.0.0

  • Rewritten to use different parser, support for HTML entities.

  • Structure of the classes completely changed, now Tag & Comment are used instead of HTMLElement.

  • Much more cleaner code and more comprehensive method names.

  • By default, the tree is now double-linked without any additional cost.

  • Implemented very useful magic methods, so indexing operators are supported for access to both parameters and content.

  • Documentation completely reworked.

  • Set of coverage tests is now much larger.

2.2.3

2.2.2

  • Attempt to fix strange recursive inheritance problem.

2.2.0

  • Rewritten for compatibility with python3.

2.1.0 - 2.1.8

  • State parser fixed - it can now recover from invalid html like <invalid tag=something">.

  • Rewritten to use StateEnum in parser for better readability.

  • Garbage collector is now disabled during _raw_split().

  • Fixed #16 - recovery after tags which don’t ends with > (</code for example).

  • Closed #17 - implementation of ignoring of < in usage as is smaller than sign.

  • Restored support of multiline attributes.

  • .parseString() now doesn’t try to parse HTML element parameters.

  • Implemented first() getter.

  • License changed to MIT.

  • Fixed #18: bug which in some cases caused invalid output.

  • Added HTMLElement.__repr__().

  • Added test_coverage.sh.

  • Added extended test_equality() coverage.

  • Formatting improvements.

  • Improved constructor handling, which is now much more readable.

  • Updated formatting of the setup.py.

  • Added more tests.

  • Fixed #22; bug in the SpecialDict.

  • Fixed some nasty unicode problems.

  • Fixed python 2 / 3 problem in docs/__init__.py.

  • getVersion() -> get_version().

2.0.10

  • Added more tests of removeTags().

  • run_tests.sh now gets arguments.

  • Check for string in removeTags() changed to basestring from str.

2.0.6 - 2.0.9

  • Fixed behaviour of toString() and tagToString().

  • SpecialDict is now derived from OrderedDict.

  • Changed and added tests of .params attribute (OrderedDict is now used).

  • Fixed bug in _repair_tags().

  • Removed _repair_tags() - it wasn’t really necessary.

  • Fixed nasty bug which could cause invalid XML output.

2.0.1 - 2.0.5

  • Fixed bugs in .match().

  • Fixed broken links in documentation.

  • Fixed bugs in .isAlmostEqual().

  • .find(); Fixed bug which prevented tag_name to be None.

  • Added op .__eq__() to the SpecialDict.

  • Added new method .containsParamSubset() to HTMLElement.

2.0.0

  • Rewritten, refactored, splitted to multiple files.

  • Added unittest coverage of almost 100% of the code.

  • Added better selector methods (.wfind(), .match)

  • Added Sphinx documentation.

  • Fixed a lot of bugs.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

DHTMLParser3-3.0.17-py3-none-any.whl (15.4 kB view hashes)

Uploaded Python 3

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