Python TypeError While Using Xml.etree.ElemenTree And Requests
This works for me: import xml.etree.ElementTree as ET from urllib2 import urlopen url = 'http://example.com' # this url points to a `xml` page tree = ET.parse(urlopen(url)) Ho
Solution 1:
You are passing the requests
respones object to ElementTree; you want to pass in the raw file object instead:
r = requests.get(url, stream=True)
ET.parse(r.raw)
.raw
returns the 'file-like' socket object, from which ElementTree.parse()
will read, just like it'll read from the urllib2
response (which is itself a file-like object).
Concrete example:
>>> r = requests.get('http://www.enetpulse.com/wp-content/uploads/sample_xml_feed_enetpulse_soccer.xml', stream=True)
>>> tree = ET.parse(r.raw)
>>> tree
<xml.etree.ElementTree.ElementTree object at 0x109dadc50>
>>> tree.getroot().tag
'spocosy'
If you have a compressed URL, the raw socket (like urllib2
) returns the compressed data undecoded; in that case you can use the ET.fromstring()
method on the binary response content:
r = requests.get(url)
ET.fromstring(r.content)
Solution 2:
You're not feeding ElementTree the response text, but the requests
Response
object itself, which is why you get the type error: need string or buffer, Response found
. Do this instead:
r = requests.get(url)
tree = ET.fromstring(r.text)
Post a Comment for "Python TypeError While Using Xml.etree.ElemenTree And Requests"