url解析相关
统一资源定位符(url)
scheme://domain:port/[path][;params][?query][#fragment]
- scheme:协议类型。
- domain:域名,如:mrlyc.blogspot.com。
- port:端口号,默认是80。
- path:资源在服务器的逻辑路径,使用
/
分割。 - params:特殊参数,很少见,如:http://en.wikipedia.org/wiki/Robotics;Notes。
- query:查询字符串。以
?
字符为起点,每个参数以&
隔开,再以=
分开参数名称与数据,通常以utf-8的url编码,中文以%
开头的16进制表示。 - fragment:信息段,指定了后会定位到指定id的位置。
注意:url应先编码再合并,先拆分再解码。
urlparse模块
urlparse
参数:
- url:指定的url。
- [scheme]:指定的协议。
- [allow_fragments]:是否允许指定信息段。
接受一个url字符串并将其分割成对应的6个部分,返回一个6元组。结果访问方法有两种,下标访问和属性引用。
url = "http://www.noaurl.com:8080/index.html;params?name=query#main"
p = urlparse.urlparse(url)
print p
print p[1]
print p.netloc
输出:
ParseResult(scheme=’http’, netloc=’www.noaurl.com:8080’, path=’/index.html’, params=’params’,query=’name=query’, fragment=’main’)
www.noaurl.com:8080
www.noaurl.com:8080
urlunparse
参数:
- data:
urlparse
对应的6元组。
urlparse
的逆操作,构造一个url字符串。
urlsplit
同urlparse
,区别是没有对params的处理,params会向前合并,因此不推荐使用。
urlunsplit
urlsplit
的逆操作,接受一个5元组,构造一个url字符串。
urljoin
参数:
- base:基址。
- url:相对地址。
- [allow_fragments]:是否允许指定信息段。
将相对地址根据基址成绝对地址。
urllib模块
推荐使用urllib2
,因此只简单带过。
urlencode
参数:
- query:可以是二元元组或者字典。
- [doseq]:对参数值为列表的项是否拆分为多项,默认为
False
。
将数据按照URL中的要求组成一个参数字符串。
data = (("q", 123), ("t", ("r", "w")))
print urllib.urlencode(data)
print urllib.urlencode(dict(data))
print urllib.urlencode(data, True)
print urllib.urlencode(data, False)
输出:
q=123&t=%28%27r%27%2C+%27w%27%29
q=123&t=%28%27r%27%2C+%27w%27%29
q=123&t=r&t=w
q=123&t=%28%27r%27%2C+%27w%27%29
网络访问相关
urllib2快速使用
暂基于python 2.x。
quote
参数:
- s:待转码字符串。
- [safe]:不转码字符,默认不转换
/
。
对url中特殊字符进行转码,如中文、空格和特殊符号。
unquote
参数:
- s:待反转码字符串。
quote
的反函数,将已转码字符反转码。
urlopen
参数:
- url:请求的url,也可以是
Request
对象,会抛出urllib2.URLError
异常。 - [data]:请求参数,字典类型。
- **timeout:设置超时,单位为秒,超时后抛出
socket.timeout
异常。
urlopen
用于快速打开一个url,根据参数提交方式不同能够选择两种方式:
- GET:参数位于url之后,data为空。
- POST:将参数作为data提交。
返回值是一个类文件对象。
Request对象
构造参数:
- url:请求的url。
- [data]:查询字符串。
- [headers]:请求头。
- [origin_req_host]:请求的服务的地址,当服务器请求一个网页中的一幅图像时,origin_req_host就是该页面的url。
- [unverifiable]:说明请求是否是无法验证的。
参考文档:urllib.request — Extensible library for opening URLs
Request
对象是一个url请求的抽象。
urllib2高级应用
Handlers一览
处理器类名 | 作用 |
---|---|
ProxyHandler | 处理代理操作 |
UnknownHandler | Raise URLError异常 |
HTTPHandler | 处理HTTP的GET和POST操作 |
HTTPDefaultErrorHandler | 处理HTTP Error的通用处理,所有的响应都会抛出HTTPError异常 |
HTTPRedirectHandler | 处理HTTP重定向操作,如301、302、303等和HEAD请求的307都会执行重定向操作 |
FTPHandler | 处理FTP操作 |
FileHandler | 处理文件 |
HTTPErrorProcessor | 处理非200异常 |
HTTPCookieProcessor | 处理cookie |
HTTPBasicAuthHandler | 处理Auth |
ProxyBasicAuthHandler | 处理Proxy和Auth |
HTTPDigestAuthHandler | 处理DigestAuth |
ProxyDigestAuthHandler | 处理ProxyDigest |
HTTPSHandler | 处理HTTPS请求 |
CacheFTPHandler | 比FTPHandler多点功能 |
ProxyHandler
使用代理来访问网络。
构造参数:
- [proxies]:需要代理的协议和地址。
import urllib2
proxy_handler = urllib2.ProxyHandler({"http":"127.0.0.1:8087","https":"127.0.0.1:8087"})
HTTPCookieProcessor
添加对cookies的处理,依赖cookielib
库。添加后能从HTTP请求中提取cookies,并在HTTP响应中回发。
import urllib2
import cookielib
cj = cookielib.CookieJar()
cookie_processor = urllib2.HTTPCookieProcessor(cj)
opener
build_opener
生成opener。
opener = urllib2.build_opener(cookie_processor,proxy_handler)
open
使用opener
打开网址或请求。
response = opener.open(url)
install_opener
将指定opener
装载为全局opener
,影响urllib2.urlopen
。
urllib2.install_opener(opener)
更多资料
Python 标准库 urllib2 的使用细节
python模块学习之—- urllib2模块详解
Python Urllib2使用:代理及其它
0 评论:
发表评论