>å¼å
ä»¬ï¼æä¸æ¯ä»¥ä¸ºèªå·±å·²ç»å¾çäºï¼æåªæä¸ä»¶äºï¼å°±æ¯å¿è®°èåï¼åªåé¢åçï¼åçæ æç´è·ï¼è¦å¾ç¥å¨åºç£è¶ç¨£éä»ä¸é¢å¬ææ¥å¾çå¥èµã(PHILIPPIANS 3:13-14)
#æ ååº(6)
##urllib
`urllib`模åç¨äºè¯»åæ¥èªç½ä¸ï¼æå¡å¨ä¸ï¼çæ°æ®ï¼æ¯å¦ä¸å°äººç¨Pythonåç¬è«ç¨åºï¼å°±å¯ä»¥ä½¿ç¨è¿ä¸ªæ¨¡åãå
çä¸ä¸ªç®åä¾åï¼
å¨Python 2ä¸ï¼è¿æ ·æä½ï¼
>>> import urllib
>>> itdiffer = urllib.urlopen("http://www.itdiffer.com")
使¯å¦æè¯»è
使ç¨çæ¯Python 3ï¼å¿
é¡»æ¢ä¸ªå§¿å¿ï¼
>>> import urllib.request
>>> itdiffer = urllib.request.urlopen("http://www.itdiffer.com")
è¿æ ·å°±å·²ç»ææçç½ç«[www.itdiffer.com](http://www.itdiffer.com)é¦é¡µçå
容æ¿è¿æ¥äºï¼å¾å°äºä¸ä¸ªç±»ä¼¼æä»¶çå¯¹è±¡ãæ¥ä¸æ¥çæä½è·æä½ä¸ä¸ªæä»¶ä¸æ ·ã
>>> print itdiffer.read() #Python 3: print(itdiffer.read())
I am Qiwsir
....//å 为å
容太å¤ï¼ä¸é¢å°±çç¥äº
è¿æ ·å°±å®æäºå¯¹ç½é¡µçæåãå½ç¶ï¼å¦æä½ ççè¦åç¬è«ç¨åºï¼è¿ä¸æ¯ä»
ä»
妿¤ãè¿éä¸ä»ç»ç¬è«ç¨åºå¦ä½ç¼åï¼ä»
说æ`urllib`模åç常ç¨å±æ§åæ¹æ³ã
Python 2:
>>> dir(urllib)
['ContentTooShortError', 'FancyURLopener', 'MAXFTPCACHE', 'URLopener', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_asciire', '_ftperrors', '_have_ssl', '_hexdig', '_hextochr', '_hostprog', '_is_unicode', '_localhost', '_noheaders', '_nportprog', '_passwdprog', '_portprog', '_queryprog', '_safe_map', '_safe_quoters', '_tagprog', '_thishost', '_typeprog', '_urlopener', '_userprog', '_valueprog', 'addbase', 'addclosehook', 'addinfo', 'addinfourl', 'always_safe', 'base64', 'basejoin', 'c', 'ftpcache', 'ftperrors', 'ftpwrapper', 'getproxies', 'getproxies_environment', 'i', 'localhost', 'noheaders', 'os', 'pathname2url', 'proxy_bypass', 'proxy_bypass_environment', 'quote', 'quote_plus', 're', 'reporthook', 'socket', 'splitattr', 'splithost', 'splitnport', 'splitpasswd', 'splitport', 'splitquery', 'splittag', 'splittype', 'splituser', 'splitvalue', 'ssl', 'string', 'sys', 'test1', 'thishost', 'time', 'toBytes', 'unquote', 'unquote_plus', 'unwrap', 'url2pathname', 'urlcleanup', 'urlencode', 'urlopen', 'urlretrieve']
Python 3:
>>> dir(urllib.request)
['AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'AbstractHTTPHandler', 'BaseHandler', 'CacheFTPHandler', 'ContentTooShortError', 'DataHandler', 'FTPHandler', 'FancyURLopener', 'FileHandler', 'HTTPBasicAuthHandler', 'HTTPCookieProcessor', 'HTTPDefaultErrorHandler', 'HTTPDigestAuthHandler', 'HTTPError', 'HTTPErrorProcessor', 'HTTPHandler', 'HTTPPasswordMgr', 'HTTPPasswordMgrWithDefaultRealm', 'HTTPPasswordMgrWithPriorAuth', 'HTTPRedirectHandler', 'HTTPSHandler', 'MAXFTPCACHE', 'OpenerDirector', 'ProxyBasicAuthHandler', 'ProxyDigestAuthHandler', 'ProxyHandler', 'Request', 'URLError', 'URLopener', 'UnknownHandler', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_cut_port_re', '_ftperrors', '_have_ssl', '_localhost', '_noheaders', '_opener', '_parse_proxy', '_proxy_bypass_macosx_sysconf', '_randombytes', '_safe_gethostbyname', '_thishost', '_url_tempfiles', 'addclosehook', 'addinfourl', 'base64', 'bisect', 'build_opener', 'collections', 'contextlib', 'email', 'ftpcache', 'ftperrors', 'ftpwrapper', 'getproxies', 'getproxies_environment', 'getproxies_registry', 'hashlib', 'http', 'install_opener', 'io', 'localhost', 'noheaders', 'os', 'parse_http_list', 'parse_keqv_list', 'pathname2url', 'posixpath', 'proxy_bypass', 'proxy_bypass_environment', 'proxy_bypass_registry', 'quote', 're', 'request_host', 'socket', 'splitattr', 'splithost', 'splitpasswd', 'splitport', 'splitquery', 'splittag', 'splittype', 'splituser', 'splitvalue', 'ssl', 'sys', 'tempfile', 'thishost', 'time', 'to_bytes', 'unquote', 'unquote_to_bytes', 'unwrap', 'url2pathname', 'urlcleanup', 'urljoin', 'urlopen', 'urlparse', 'urlretrieve', 'urlsplit', 'urlunparse', 'warnings']
éå 个常ç¨çä»ç»ï¼å¦æè¯»è
ç¨å°å
¶å®çï¼å¯ä»¥éè¿æ¥çææ¡£äºè§£ã
**urlopen()**
`urlopen()`主è¦ç¨äºæå¼urlæä»¶ï¼ç¶åå°±è·å¾æå®urlçæ°æ®ï¼ç¶åå°±å¦å卿使件飿 ·æ¥æä½ã
Help on function urlopen in module urllib:
urlopen(url, data=None, proxies=None)
Create a file-like object for the specified URL to read from.
æ¥çææ¡£ä¿¡æ¯ï¼å¨Python 2ä¸ä½¿ç¨`help(urllib.urlopen)`ï¼å¨Python 3ä¸ä½¿ç¨`help(urllib.request.urlopen)`ã两è
æ¥è¯¢ç»æç¥æå·®å¼ï¼ä¸è¿°æ¾ç¤ºçæ¯Python 2ä¸çæ¥è¯¢ç»æã
å¾å°ç对象被å«åç±»æä»¶ãä»ååä¸ä¹å¯ä»¥çè§£åé¢çæä½äºãå
å¯¹åæ°è¯´æä¸ä¸ï¼
- urlï¼è¿ç¨æ°æ®çè·¯å¾ï¼å¸¸å¸¸æ¯ç½å
- dataï¼å¦æä½¿ç¨postæ¹å¼ï¼è¿éå°±æ¯ææäº¤çæ°æ®
- proxiesï¼è®¾ç½®ä»£ç
å
³äºåæ°ç详ç»è¯´æï¼è¿å¯ä»¥åè[Pythonç宿¹ææ¡£](https://docs.python.org/2/library/urllib.html)ï¼è¿éä»
æ¼ç¤ºæå¸¸ç¨çï¼å¦åé¢çä¾å飿 ·ã
å½å¾å°äºç±»æä»¶å¯¹è±¡ä¹åï¼å³åé`itdiffer`å¼ç¨äºå¾å°çç±»æä»¶å¯¹è±¡ï¼ä¾ç¶å¯ä»¥ç¨èåæ³`dir(itdiffer)`æ¥çå®ç屿§åæ¹æ³ï¼ä½å¨ä¸åçPythonçæ¬ä¸ï¼æ¾ç¤ºç»ææ¯ææä¸åçï¼åºå«çåå æ¯ä¸¤ä¸ªçæ¬å¯¹æä»¶å¯¹è±¡çä¸åå¤çã
ç®å举ä¾ï¼
>>> itdiffer.info()
>>> itdiffer.getcode()
200
>>> itdiffer.geturl()
'http://www.itdiffer.com'
æ´å¤æ
åµä¸ï¼å·²ç»å»ºç«äºç±»æä»¶å¯¹è±¡ï¼éè¿å¯¹æä»¶æä½æ¹æ³ï¼è·å¾æ³è¦çæ°æ®ã
**对urlç¼ç ãè§£ç **
url对å
¶ä¸çå符æä¸¥æ ¼çç¼ç è¦æ±ï¼è¦å¯¹urlè¿è¡ç¼ç åè§£ç ãå¨è¿è¡webå¼åçæ¶åç¹å«è¦æ³¨æã`urllib`æè
`urllib.request`模åæä¾è¿ç§åè½ã
- quote(string[, safe])ï¼å¯¹å符串è¿è¡ç¼ç ãåæ°safeæå®äºä¸éè¦ç¼ç çå符
- urllib.unquote(string) ï¼å¯¹å符串è¿è¡è§£ç
- quote_plus(string [ , safe ] ) ï¼ä¸urllib.quote类似ï¼ä½è¿ä¸ªæ¹æ³ç¨'+'æ¥æ¿æ¢ç©ºæ ¼`' '`ï¼èquoteç¨'%20'æ¥ä»£æ¿ç©ºæ ¼
- unquote_plus(string ) ï¼å¯¹å符串è¿è¡è§£ç ï¼
- urllib.urlencode(query[, doseq])ï¼å°dictæè
å
å«ä¸¤ä¸ªå
ç´ çå
ç»åè¡¨è½¬æ¢æurlåæ°ãä¾å¦{'name': 'laoqi', 'age': 40}å°è¢«è½¬æ¢ä¸º"name=laoqi&age=40"
- pathname2url(path)ï¼å°æ¬å°è·¯å¾è½¬æ¢æurlè·¯å¾
- url2pathname(path)ï¼å°urlè·¯å¾è½¬æ¢ææ¬å°è·¯å¾
çä¾åå°±æ´æç½äºãä¸é¢çæä½æ¯å¨Python 2ä¸è¿è¡çï¼
>>> du = "http://www.itdiffer.com/name=python book"
>>> urllib.quote(du)
'http%3A//www.itdiffer.com/name%3Dpython%20book'
>>> urllib.quote_plus(du)
'http%3A%2F%2Fwww.itdiffer.com%2Fname%3Dpython+book'
妿æ¯Python 3ç读è
ï¼è¯·æ³¨æï¼è¯¥æ¹æ³ä¸å¨åè¿°æå¼ç¨ç`urllib.request`ä¸ï¼å°½ç®¡å®é颿`quote()`æ¹æ³ï¼ä½æå¥½çæä½æ¯`import urllib.parrse`ï¼æä»¥ï¼Python 3ä¸åºè¯¥è¿ä¹æä½ï¼
>>> import urllib.parse
>>> du = 'http://www.itdiffer.com/name=python book'
>>> urllib.parse.quote(du)
'http%3A//www.itdiffer.com/name%3Dpython%20book'
>>> urllib.parse.quote_plus(du)
'http%3A%2F%2Fwww.itdiffer.com%2Fname%3Dpython+book'
注æçç©ºæ ¼çååï¼ä¸ä¸ªè¢«ç¼ç æ`%20`ï¼å¦å¤ä¸ä¸ªæ¯`+`
åçè§£ç çï¼åå¦å¨googleä¸æç´¢`é¶åºç¡ python`ï¼ç»æå¦ä¸å¾ï¼

æçæç¨å¯æ¯å¨è¿æ¬¡æç´¢ä¸æå第ä¸ä¸ªå¦ã
è¿ä¸æ¯éç¹ï¼éç¹æ¯çurlï¼å®å°±æ¯ç¨`+`æ¿ä»£ç©ºæ ¼äºã
Python 2:
>>> dup = urllib.quote_plus(du)
>>> urllib.unquote_plus(dup)
'http://www.itdiffer.com/name=python book'
Python 3:
>>> dup = urllib.parse.quote_plus(du)
>>> urllib.parse.unquote_plus(dup)
'http://www.itdiffer.com/name=python book'
ä»è§£ç æææ¥çï¼æ¯è¾å®ç¾å°éè¿ç¨ã
Python 2:
>>> urllib.urlencode({"name":"qiwsir","web":"itdiffer.com"})
'web=itdiffer.com&name=qiwsir'
Python 3:
>>> urllib.parse.urlencode({"name":"qiwsir","web":"itdiffer.com"})
'name=qiwsir&web=itdiffer.com'
妿尿¥ä½ è¦åä¸ä¸ªç½ç«ï¼ä¸é¢çæ¹æ³æè®¸ä¼ç¨å°ã
**urlretrieve()**
è½ç¶urlopen()è½å¤å»ºç«ç±»æä»¶å¯¹è±¡ï¼ä½æ¯ï¼é£è¿ä¸çäºå°è¿ç¨æä»¶ä¿å卿¬å°åå¨å¨ä¸ï¼`urlretrieve()`å°±æ¯æ»¡è¶³è¿ä¸ªéè¦çãå
çå®ä¾ã
以䏿¯å¨Python 2ä¸çæä½ï¼
>>> import urllib
>>> urllib.urlretrieve("http://www.itdiffer.com/images/me.jpg", "me.jpg")
('me.jpg', )
妿å¨Python 3ä¸ï¼åè¦ä½¿ç¨`urllib.request`ï¼
>>> import urllib.request
>>> urllib.request.urlretrieve("http://www.itdiffer.com/images/me.jpg", "me.jpg")
('me.jpg', )
`me.jpg`æ¯ä¸å¼ åå¨äºæå¡å¨ä¸çå¾çï¼å°åæ¯ï¼http://www.itdiffer.com/images/me.jpgï¼æå®ä¿åå°æ¬å°åå¨å¨ä¸ï¼å¹¶ä¸ä»æ§å½å为me.jpgãæ³¨æï¼å¦æåªåè¿ä¸ªååï¼è¡¨ç¤ºåå¨å¯å¨Pythonäº¤äºæ¨¡å¼çé£ä¸ªç®å½ä¸ï¼å¦åï¼å¯ä»¥æå®åå¨å
·ä½ç®å½åæä»¶åã
å¨urllib宿¹ææ¡£ï¼[Python 2ææ¡£](https://docs.python.org/2/library/urllib.html)ï¼[Python 3ææ¡£](https://docs.python.org/3/library/urllib.html)ï¼ä¸æä¸å¤§æ®µç¸å
³è¯´æï¼è¯»è
å¯ä»¥å»è®¤çé
读ãè¿éä»
ç®è¦ä»ç»ä¸ä¸ç¸å
³åæ°ã
`urllib.urlretrieve(url[, filename[, reporthook[, data]]])`
- urlï¼æä»¶æå¨çç½å
- filenameï¼å¯éãå°æä»¶ä¿åå°æ¬å°çæä»¶åï¼å¦æä¸æå®ï¼urllibä¼çæä¸ä¸ªä¸´æ¶æä»¶æ¥ä¿å
- reporthookï¼å¯éãæ¯åè°å½æ°ï¼å½é¾æ¥æå¡å¨åç¸åºæ°æ®ä¼ è¾å®æ¯æ¶è§¦åæ¬å½æ°
- dataï¼å¯éã妿ç¨postæ¹å¼æååºçæ°æ®
彿°æ§è¡å®æ¯ï¼è¿åçç»ææ¯ä¸ä¸ªå
ç»(filename, headers)ï¼filenameæ¯ä¿åå°æ¬å°çæä»¶åï¼headersæ¯æå¡å¨ååºå¤´ä¿¡æ¯ã
#!/usr/bin/env python
# coding=utf-8
import urllib
#Python 3
#import urllib.request
def go(a,b,c):
per = 100.0 * a * b / c
if per > 100:
per = 100
print "%.2f%%" % per
url = "http://ww2.sinaimg.cn/mw690/8e4023f8gw1f34gs20b4ij20qo0zkthw.jpg"
local = "/home/qw/Pictures/g.jpg"
urllib.urlretrieve(url, local, go)
#Python 3
#urllib.request.urlrretrieve(url, local, go)
è¿æ®µç¨åºå°±æ¯è¦ä¸è½½æå®çå¾çï¼å¹¶ä¸ä¿å为æ¬å°æå®ä½ç½®çæä»¶ï¼åæ¶è¦æ¾ç¤ºä¸è½½çè¿åº¦ãä¸è¿°æä»¶ä¿åä¹åæ§è¡ï¼æ¾ç¤ºå¦ä¸ææï¼
$ python 22501.py
0.00%
8.13%
16.26%
24.40%
32.53%
40.66%
48.79%
56.93%
65.06%
73.19%
81.32%
89.46%
97.59%
100.00%
å°ç¸åºç®å½ä¸æ¥çï¼è½çå°ä¸ç½ä¸å°å䏿 ·çæä»¶ãæè¿éå°±ä¸å¯¹ç»ææªå¾äºï¼è¯»è
èªè¡æ¥çï¼æè®¸å¨æ¬ä¹¦åºççæ¶åï¼è¿å¼ ä»ä¹çå¾çå·²ç»çä¸å°äºï¼ä½ åºè¯¥æè¿è§ä¸ºæ£å¸¸ç°è±¡ï¼å¯ä»¥æ¢ä¸å¼ å¾çå°åï¼ã
##urllib2
urllib2æ¯å¦å¤ä¸ä¸ªæ¨¡åï¼å®è·urllibæç¸ä¼¼çå°æ¹ââ齿¯å¯¹urlç¸å
³çæä½ï¼ä¹æä¸åçå°æ¹ãå
³äºè¿æ¹é¢ï¼æä¸ç¯æç« 讲çä¸éï¼[Python: difference between urllib and urllib2](http://www.hacksparrow.com/python-difference-between-urllib-and-urllib2.html)
æéå䏿®µï¼ä¾å¤§å®¶åèï¼
>urllib2 can accept a Request object to set the headers for a URL request, urllib accepts only a URL. That means, you cannot masquerade your User Agent string etc.
>urllib provides the urlencode method which is used for the generation of GET query strings, urllib2 doesn't have such a function. This is one of the reasons why urllib is often used along with urllib2.
æä»¥ï¼ææ¶å两个è¦åæ¶ä½¿ç¨ï¼urllib模ååurllib2模åæçæ¹æ³å¯ä»¥ç¸äºæ¿ä»£ï¼æçä¸è½ãçä¸é¢ç屿§æ¹æ³å表就ç¥éäºã
>>> dir(urllib2)
['AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'AbstractHTTPHandler', 'BaseHandler', 'CacheFTPHandler', 'FTPHandler', 'FileHandler', 'HTTPBasicAuthHandler', 'HTTPCookieProcessor', 'HTTPDefaultErrorHandler', 'HTTPDigestAuthHandler', 'HTTPError', 'HTTPErrorProcessor', 'HTTPHandler', 'HTTPPasswordMgr', 'HTTPPasswordMgrWithDefaultRealm', 'HTTPRedirectHandler', 'HTTPSHandler', 'OpenerDirector', 'ProxyBasicAuthHandler', 'ProxyDigestAuthHandler', 'ProxyHandler', 'Request', 'StringIO', 'URLError', 'UnknownHandler', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_cut_port_re', '_opener', '_parse_proxy', '_safe_gethostbyname', 'addinfourl', 'base64', 'bisect', 'build_opener', 'ftpwrapper', 'getproxies', 'hashlib', 'httplib', 'install_opener', 'localhost', 'mimetools', 'os', 'parse_http_list', 'parse_keqv_list', 'posixpath', 'proxy_bypass', 'quote', 'random', 'randombytes', 're', 'request_host', 'socket', 'splitattr', 'splithost', 'splitpasswd', 'splitport', 'splittag', 'splittype', 'splituser', 'splitvalue', 'sys', 'time', 'toBytes', 'unquote', 'unwrap', 'url2pathname', 'urlopen', 'urlparse', 'warnings']
æ¯è¾å¸¸ç¨çæ¯å¦`urlopen()`è·`urllib.open()`æ¯å®å
¨ç±»ä¼¼çã
使¯ï¼è¦æ³¨æï¼ä¸è¿°è¨è®ºä»
ä»
æ¯é对Python 2çï¼å¨Python 3ä¸ï¼å·²ç»æ²¡æ`urllib2`è¿ä¸ªæ¨¡åäºï¼å代å®çæ¯`urllib.request`ã
**Requestç±»**
æ£å¦åé¢åºå«urllibåurllib2æè®²ï¼å©ç¨urllib2模åå¯ä»¥å»ºç«ä¸ä¸ªRequestå¯¹è±¡ãæ¹æ³å°±æ¯ï¼
Python 2:
>>> req = urllib2.Request("http://www.itdiffer.com")
Python 3:
>>> import urllib.request
>>> req = urllib.request.Request("http://www.itdiffer.com")
建ç«äºRequest对象ä¹åï¼å®çæç´æ¥åºç¨å°±æ¯å¯ä»¥ä½ä¸º`urlopen()`æ¹æ³çåæ°
Python 2:
>>> response = urllib2.urlopen(req)
>>> page = response.read()
>>> print page
Python 3:
>>> response = urllib.request.urlopen(req)
>>> page = response.read()
>>> print(page)
æ¾ç¤ºç»æä»ç¥ã使¯ï¼å¦æRequest对象ä»
ä»
å±éäºæ¤ï¼ä¼¼ä¹è¿æ²¡æä»ä¹å¤ªå¤§çä¼å¿ãå 为åæç访é®ä»
ä»
æ¯æ»¡è¶³ä»¥getæ¹å¼è¯·æ±é¡µé¢ï¼å¹¶å»ºç«ç±»æä»¶å¯¹è±¡ã妿æ¯éè¿poståæå°åæäº¤æ°æ®ï¼ä¹å¯ä»¥å»ºç«Request对象ã
Python 2:
import urllib
import urllib2
url = 'http://www.itdiffer.com/register.py'
values = {'name' : 'qiwsir', 'location' : 'China', 'language' : 'Python' }
data = urllib.urlencode(values) # ç¼ç
req = urllib2.Request(url, data) # åé请æ±åæ¶ä¼ data表å
response = urllib2.urlopen(req) #æ¥ååé¦çä¿¡æ¯
the_page = response.read() #读ååé¦çå
容
Python 3:
import urllib.request
import urllib.parse
url = 'http://www.itdiffer.com/register.py'
values = {'name' : 'qiwsir', 'location' : 'China', 'language' : 'Python' }
data = urllib.parse.urlencode(values) # ç¼ç
req = urllib.request.Request(url, data) # åé请æ±åæ¶ä¼ data表å
response = urllib.request.urlopen(req) #æ¥ååé¦çä¿¡æ¯
the_page = response.read() #读ååé¦çå
容
å¦æè¯»è
ç
§æä¸é¢çç¨åºï¼ç¶åè¿è¡ä»£ç ï¼è¯å®æ¥éãå 为é£ä¸ªurl䏿²¡æç¸åºçæ¥å客æ·ç«¯postä¸å»çdataçç¨åºæä»¶ï¼ä¸ºäºè®©ç¨åºè¿è¡ï¼è¯»è
å¯ä»¥å¼åæ¥åæ°æ®çç¨åºãä¸é¢ç代ç åªæ¯ä»¥ä¸ä¸ªä¾åæ¥æ¾ç¤ºRequest对象çå¦å¤ä¸ä¸ªç¨éï¼å¹¶ä¸å¨è¿ä¸ªä¾å䏿¯ä»¥postæ¹å¼æäº¤æ°æ®ã
å¨ç½ç«ä¸ï¼æçä¼éè¿User-Agentæ¥å¤æè®¿é®è
æ¯æµè§å¨è¿æ¯å«çç¨åºï¼å¦æéè¿å«çç¨åºè®¿é®ï¼å®æå¯è½æç»ãè¿æ¶åï¼æä»¬ç¼åç¨åºå»è®¿é®ï¼å°±è¦è®¾ç½®headersäºãè®¾ç½®æ¹æ³æ¯ï¼
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
ç¶åéæ°å»ºç«Request对象ï¼
req = urllib2.Request(url, data, headers) #Python 3: req = urllib.request.Request(url, data, headers)
åç¨Â·urlopen()Â·æ¹æ³è®¿é®ï¼
response = urllib2.urlopen(req) #Python 3: response = urllib.request.urlopen(req)
é¤äºä¸é¢æ¼ç¤ºä¹å¤ï¼`urllib2`æè
`urllib.request`çä¸è¥¿è¿å¾å¤ï¼æ¯å¦è¿å¯ä»¥:
- 设置HTTP Proxy
- 设置Timeoutå¼
- èªå¨redirect
- å¤çcookie
ççãè¿äºå
容ä¸åä¸ä¸ä»ç»ï¼å½éè¦ç¨å°çæ¶åå¯ä»¥æ¥çææ¡£æè
googleã
------
[æ»ç®å½](./index.md) | [ä¸èï¼æ ååº(5)](./224.md) | [ä¸èï¼æ ååº(7)](./226.md)
å¦æä½ è®¤ä¸ºæå¿
è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã