In Python, what are the differences between the urllib
, urllib2
, and requests
module? Why are there three? They seem to do the same thing...
相关问题
- how to define constructor for Python's new Nam
- streaming md5sum of contents of a large remote tar
- How to get the background from multiple images by
- Evil ctypes hack in python
- Correctly parse PDF paragraphs with Python
I know its been said already, but I'd highly recommend the Requests python package: http://docs.python-requests.org/en/latest/index.html
If you've used languages other than python, you're probably thinking urllib and urllib2 are easy to use, not much code, and highly capable, that's how I used to think. But the Requests package is so unbelievably useful and short that everyone should be using it.
First, it supports a fully restful API, and is as easy as:
Regardless of whether GET/POST you never have to encode parameters again, it simply takes a dictionary as an argument and is good to go.
Plus it even has a built in json decoder (again, i know json.loads() isn't a lot more to write, but this sure is convenient):
Or if your response data is just text, use:
This is just the tip of the iceberg. This is the list of features from the requests site:
Just to add to the existing answers, I don't see anyone mentioning that python requests is not a native library. If you are ok with adding dependencies, then requests is fine. However, if you are trying to avoid adding dependencies, urllib is a native python library that is already available to you.
A key point that I find missing in the above answers is that urllib returns an object of type
<class http.client.HTTPResponse>
whereasrequests
returns<class 'requests.models.Response'>
. Due to this, read() method can be used withurllib
but not withrequests
. P.S. :requests
is already rich with so many methods that it hardly needs one more asread()
;>I like the
urllib.urlencode
function, and it doesn't appear to exist inurllib2
.