爬虫专题

urllib的使用

2018-10-22  本文已影响7人  Fizz翊

urllib库是python内置的HTTP请求库。

包含以下四个模块:

1) request 最基本的HTTP请求模块,可以用来模拟发送请求。

2)error 异常处理模块

3)parse 一个工具模块,提供了许多URL处理方法,比如拆分,解析,合并等。

4)robotparser 用来识别网站的robots.txt文件,从而判断哪些网站可以爬,哪些网站不可以爬。

1.request 模块

1.1 urlopen()

import urllib.request

response = urllib.request.urlopen(url)

得到的response是一个HTTPResponse类型的对象,主要包含read(),readinto(),getheader(name),getheaders(),fileno()等方法,以及msg,version,status,reason等属性。

通过urlopen()得到response这个对象后,就可以调用上面提到的这些方法和属性,从而得到返回结果的一系列对象,

1.2 Request

urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)

1.3高级用法

2.处理异常

urllib的error模块定义了由request模块产生的异常。

2.1URLError

URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过捕获和这个类来处理

这个类具有一个reason属性,即返回的错误的原因。

from urllib import request,error
try:
    .....
except error.URLError as e:
    print(e.reason)

2.2HTTPError

它是URLError的子类,专门用来处理HTTP请求错误。它有三个属性

3解析链接

urllib库里提供了一个parse模块,定义处理URL的标准接口,例如实现URL各部分的抽取,合并以及链接转换

3.1 urlparse(urlstring,shcme='',allow_fragments=True)

from urllib.parse import urlparse

result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result),result)
<class 'urllib.parse.ParseResult'> ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

从打印的结果可以看出,返回的是一个ParseResult类型的对象,它包含了6个部分,分别是scheme(协议,比如http,https),netloc(域名),path(访问路径),params(参数),query(问号后面的查询条件),fragment(#后面的内容).

一个标准的链接格式: scheme://netloc/path;params?query#fragment

3.2urlunparse()

与urlparse()方法的对立。它接受的参数是一个可迭代对象,长度必须为6,即传入6个参数,返回的结果是组装好的URL.

data = ['http','www.baidu.com','index.html','user','a=6','comment']
print(urlunparse(data))

得到的结果为

http://www.baidu.com/index.html;user?a=6#comment

3.3urlsplit()与urlunsplit()

这个方法和urlparse()方法类似,只不过不在解析parms这个部分,只返回五个结果。parms部分会合并到path中。

3.4 urljoin()

使用URLjoin方法 需要提供一个base_url作为第一参数,将新的链接作为第二个参数,然后会合成一个新的链接。

Base_url 提供了三项内容,scheme,netloc,path.如果这三项在新的链接中不存在就补充,如果新的链接存在,就使用新的链接中的部分。

3.5 urlencode() 与 parse_qs()

from urllib.parse import urlencode

params = {
    'name':'germey',
    'age':22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)

结果为:

http://www.baidu.com?name=germey&age=22

将字典类型转换为GET请求参数。

如果我们有一串GET请求参数,利用parse_qs()方法,就可以将参数转换为字典

3.5 quote()与unquote()

Quote将中文转化为URL编码的格式

from urllib.parse import quote

url_word = quote(keyword)

unquote将URL编码解码成中文

上一篇 下一篇

猜你喜欢

热点阅读