Skip to main content

Requests-XML: XML Parsing for Humans

https://travis-ci.org/erinxocon/requests-xml.svg?branch=master https://img.shields.io/pypi/v/requests-xml.svg?maxAge=2592000 https://img.shields.io/pypi/l/requests-xml.svg?maxAge=2592000

This library intends to make parsing XML as simple and intuitive as possible. Requests-XML is related to the amazing Requests-HTML and delivers the same quality of user experience — with support for our beloved XML documents.

When using this library you automatically get:

  • XPath Selectors, for the brave at heart.

  • Simple Search/Find for the faint at heart.

  • XML to JSON conversion thanks to xmljson.

  • Mocked user-agent (like a real web browser).

  • Connection–pooling and cookie persistence.

  • The Requests experience you know and love, with magical XML parsing abilities.

Installation

$ pipenv install requests-xml
✨🍰✨

Only Python 3.6 is supported.

Tutorial & Usage

Make a GET request to nasa.gov, using Requests:

>>> from requests_xml import XMLSession
>>> session = XMLSession()

>>> r = session.get('https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss')

Grab a list of all links on the page, as–is (this only works for RSS feeds, or other feeds that happen to have link elements):

>>> r.xml.links
['http://www.nasa.gov/image-feature/from-the-earth-moon-and-beyond', 'http://www.nasa.gov/image-feature/jpl/pia21974/jupiter-s-colorful-cloud-belts', 'http://www.nasa.gov/', 'http://www.nasa.gov/image-feature/portrait-of-the-expedition-54-crew-on-the-space-station', ...]

XPath is the main supported way to query an element (learn more):

>>> item = r.xml.xpath('//item', first=True)
<Element 'item' >

Grab an element’s text contents:

>>> print(item.text)
The Beauty of Light
http://www.nasa.gov/image-feature/the-beauty-of-light
The Soyuz MS-08 rocket is launched with Soyuz Commander Oleg Artemyev of Roscosmos and astronauts Ricky Arnold and Drew Feustel of NASA, March 21, 2018, to join the crew of the Space Station.
http://www.nasa.gov/image-feature/the-beauty-of-light
Wed, 21 Mar 2018 14:12 EDT
NASA Image of the Day

Introspect an element’s attributes (learn more):

>>> rss = r.xml.xpath('//rss', first=True)
>>> rss.attrs
{'version': '2.0', '{http://www.w3.org/XML/1998/namespace}base': 'http://www.nasa.gov/'}

Render out an element’s XML (note: namespaces will be applied to sub elements when grabbed):

>>> item.xml
'<item xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/"> <title>The Beauty of Light</title>\n <link>http://www.nasa.gov/image-feature/the-beauty-of-light</link>\n <description>The Soyuz MS-08 rocket is launched with Soyuz Commander Oleg Artemyev of Roscosmos and astronauts Ricky Arnold and Drew Feustel of NASA, March 21, 2018, to join the crew of the Space Station.</description>\n <enclosure url="http://www.nasa.gov/sites/default/files/thumbnails/image/nhq201803210005.jpg" length="1267028" type="image/jpeg"/>\n <guid isPermaLink="false">http://www.nasa.gov/image-feature/the-beauty-of-light</guid>\n <pubDate>Wed, 21 Mar 2018 14:12 EDT</pubDate>\n <source url="http://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss">NASA Image of the Day</source>\n</item>'

Select an element list within an element:

>>> item.xpath('//enclosure')[0].attrs['url']
'http://www.nasa.gov/sites/default/files/thumbnails/image/nhq201803210005.jpg'

Search for links within an element:

>>> item.links
['http://www.nasa.gov/image-feature/the-beauty-of-light']

Search for text on the page. This is useful if you wish to search out things between specific tags without using XPath:

>>> r.xml.search('<title>{}</title>)
<Result ('NASA Image of the Day',) {}>

Using PyQuery we can use CSS selectors to easily grab an element, with a simple syntax for ensuring the element contains certain text. This can be used as another easy way to grab an element without an XPath:

>>> light_title = r.xml.find('title', containing='The Beauty of Light')
[<Element 'title' >]

>>> light_title[0].text
'The Beauty of Light'

Note: XPath is preferred as it can allow you to get very specific with your element selection. Find is intended to be an easy way of grabbing all elements of a certain name. Find does however accept CSS selectors, and if you can get those to work with straight XML, go for it!

JSON Support

Using the great xmljson package, we convert the whole XML document into a JSON representation. There are six different conversion convetions available. See the about for what they are. The default is badgerfish. If you wish to use a different conversion convention, pass in a string with the name of the convetion to the .json() method.

Using without Requests

You can also use this library without Requests:

>>> from requests_xml import XML
>>> doc = """
<employees>
    <person>
        <name value="Alice"/>
    </person>
    <person>
        <name value="Bob"/>
    </person>
</employees>
"""

>>> xml = XML(xml=doc)
>>> xml.json()
{
    "employees": [{
        "person": {
            "name": {
                "@value": "Alice"
            }
        }
    }, {
        "person": {
            "name": {
                "@value": "Bob"
            }
        }
    }]
}

License

MIT

Metadata

Release files for requests-xml 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for requests-xml 0.2.3
File Size Uploaded Provenance
requests-xml-0.2.3.tar.gz 9.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for requests-xml 0.2.3
File Interpreter ABI Platform
requests_xml-0.2.3-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 21.4 kB

Release files / requests-xml-0.2.3.tar.gz

Download URL requests-xml-0.2.3.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ba2e8d508594561df3b7fada50d2d36cfda00ee3307f8d8ee406ac92b2d9c5c8
BLAKE2b-256 checksum
How to use checksums
e46f50c80681e25473ebf4750d7a8c8781afd147f9820faae3430487bbce5bda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / requests_xml-0.2.3-py2.py3-none-any.whl

Download URL requests_xml-0.2.3-py2.py3-none-any.whl
Size 11.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
a428482b0b08d76cbba0a6e2136ae0ff8f6ffe22c3a60f03e3a6983fbb27a79c
BLAKE2b-256 checksum
How to use checksums
3e392229bdb377549b44794e7947ad1dab01da6033d435bc952a97215db5f581
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for requests-xml 0.2.3

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page