Package: parsel
Parsel is a BSD-licensedPythonlibrary to extract data fromHTML,JSON, andXMLdocuments.It supports:CSSandXPathexpressions for HTML and XML documentsJMESPathexpressions for JSON documentsRegular expressionsFind the Parsel online documentation athttps://parsel.readthedocs.org.Example (open online demo):>>>fromparselimportSelector>>>text="""
        <html>
            <body>
                <h1>Hello, Parsel!</h1>
                <ul>
                    <li><a href="http://example.com">Link 1</a></li>
                    <li><a href="http://scrapy.org">Link 2</a></li>
                </ul>
                <script type="application/json">{"a": ["b", "c"]}</script>
            </body>
        </html>""">>>selector=Selector(text=text)>>>selector.css('h1::text').get()'Hello, Parsel!'>>>selector.xpath('//h1/text()').re(r'\w+')['Hello','Parsel']>>>forliinselector.css('ul > li'):...print(li.xpath('.//@href').get())http://example.comhttp://scrapy.org>>>selector.css('script::text').jmespath("a").get()'b'>>>selector.css('script::text').jmespath("a").getall()['b','c']History1.8.1 (2023-04-18)Remove a Sphinx reference from NEWS to fix the PyPI descriptionAdd atwine checkCI check to detect such problems1.8.0 (2023-04-18)Add support for JMESPath: you can now create a selector for a JSON document
and callSelector.jmespath(). Seethe documentationfor more
information and examples.Selectors can now be constructed frombytes(using thebodyandencodingarguments) instead ofstr(using thetextargument), so
that there is no internal conversion fromstrtobytesand the memory
usage is lower.Typing improvementsThepkg_resourcesmodule (which was absent from the requirements) is no
longer usedDocumentation build fixesNew requirements:jmespathtyping_extensions(on Python 3.7)1.7.0 (2022-11-01)Add PEP 561-style type informationSupport for Python 2.7, 3.5 and 3.6 is removedSupport for Python 3.9-3.11 is addedVery large documents (with deep nesting or long tag content) can now be
parsed, andSelectornow takes a new argumenthuge_treeto disable
thisSupport for new features of cssselect 1.2.0 is addedTheSelector.remove()andSelectorList.remove()methods are
deprecated and replaced with the newSelector.drop()andSelectorList.drop()methods which don’t delete text after the dropped
elements when used in the HTML mode.1.6.0 (2020-05-07)Python 3.4 is no longer supportedNewSelector.remove()andSelectorList.remove()methods to remove
selected elements from the parsed document treeImprovements to error reporting, test coverage and documentation, and code
cleanup1.5.2 (2019-08-09)Selector.remove_namespacesreceived a significant performance improvementThe value ofdatawithin the printable representation of a selector
(repr(selector)) now ends in...when truncated, to make the
truncation obvious.Minor documentation improvements.1.5.1 (2018-10-25)has-classXPath function handles newlines and other separators
in class names properly;fixed parsing of HTML documents with null bytes;documentation improvements;Python 3.7 tests are run on CI; other test improvements.1.5.0 (2018-07-04)NewSelector.attribandSelectorList.attribproperties which make
it easier to get attributes of HTML elements.CSS selectors became faster: compilation results are cached
(LRU cache is used forcss2xpath), so there is
less overhead when the same CSS expression is used several times..get()and.getall()selector methods are documented and recommended
over.extract_first()and.extract().Various documentation tweaks and improvements.One more change is that.extract()and.extract_first()methods
are now implemented using.get()and.getall(), not the other
way around, and instead of callingSelector.extractall other methods
now callSelector.getinternally. It can bebackwards incompatiblein case of custom Selector subclasses which overrideSelector.extractwithout doing the same forSelector.get. If you have such Selector
subclass, make suregetmethod is also overridden. For example, this:class MySelector(parsel.Selector):
    def extract(self):
        return super().extract() + " foo"should be changed to this:class MySelector(parsel.Selector):
    def get(self):
        return super().get() + " foo"
    extract = get1.4.0 (2018-02-08)SelectorandSelectorListcan’t be pickled because
pickling/unpickling doesn’t work forlxml.html.HtmlElement;
parsel now raises TypeError explicitly instead of allowing pickle to
silently produce wrong output. This is technically backwards-incompatible
if you’re using Python < 3.6.1.3.1 (2017-12-28)Fix artifact uploads to pypi.1.3.0 (2017-12-28)has-classXPath extension function;parsel.xpathfuncs.set_xpathfuncis a simplified way to register
XPath extensions;Selector.remove_namespacesnow removes namespace declarations;Python 3.3 support is dropped;make htmlviewcommand for easier Parsel docs development.CI: PyPy installation is fixed; parsel now runs tests for PyPy3 as well.1.2.0 (2017-05-17)AddSelectorList.getandSelectorList.getallmethods as aliases forSelectorList.extract_firstandSelectorList.extractrespectivelyAdd default value parameter toSelectorList.re_firstmethodAddSelector.re_firstmethodAddreplace_entitiesargument on.re()and.re_first()to turn off replacing of character entity referencesBug fix: detectNoneresult from lxml parsing and fallback with an empty documentRearrange XML/HTML examples in the selectors usage docsTravis CI:Test against Python 3.6Test against PyPy using “Portable PyPy for Linux” distribution1.1.0 (2016-11-22)Change default HTML parser tolxml.html.HTMLParser,
which makes easier to use some HTML specific featuresAdd css2xpath function to translate CSS to XPathAdd support for ad-hoc namespaces declarationsAdd support for XPath variablesDocumentation improvements and updates1.0.3 (2016-07-29)Add BSD-3-Clause license fileRe-enable PyPy testsIntegrate py.test runs with setuptools (needed for Debian packaging)Changelog is now calledNEWS1.0.2 (2016-04-26)Fix bug in exception handling causing original traceback to be lostAdded docstrings and other doc fixes1.0.1 (2015-08-24)Updated PyPI classifiersAdded docstrings for csstranslator module and other doc fixes1.0.0 (2015-08-22)Documentation fixes0.9.6 (2015-08-14)Updated documentationExtended test coverage0.9.5 (2015-08-11)Support for extending SelectorList0.9.4 (2015-08-10)Try workaround for travis-ci/dpl#2530.9.3 (2015-08-07)Add base_url argument0.9.2 (2015-08-07)Rename module unified -> selector and promoted root attributeAdd create_root_node function0.9.1 (2015-08-04)Setup Sphinx build and docs structureBuild universal wheelsRename some leftovers from package extraction0.9.0 (2015-07-30)First release on PyPI.