Python 爬虫 --- urllib,,对于互联网数据,Py


对于互联网数据,Python 有很多处理网络协议的工具,urllib 是很常用的一种。

一、urllib.request,request 可以很方便的抓取 URL 内容。

urllib.request.urlopen(url)  返回请求 url 后的二进制对象·

    参数:url=‘http://www.baidu.com’,请求的 url。

       data=None,请求的数据,可有可无,bytes 类型。

       timeout=3,设置访问超时时间,可有可无

       cafile=None,HTTPS 请求 CA 证书

       capath=None,CA 证书 path

       context=None,指定 SSL 设置,可有可无,ssl.SSLContext 类型

urllib.request.Request()  把请求独立成一个对象,对请求参数的设定更方便灵活

    参数:url,请求 url。

       data=None,请求参数,可有可无

       headers={},请求 header 参数。

       origin_req_host=None,请求 host 或 IP

       unverifiable=False,表明请求是否无法验证,默认为 false

       method=None,请求方法,get、post、put 等

urllib.request.ProxyHandler()  设置代理,参数为 dict,如:{‘http‘: ‘120.194.18.90:81‘}urllib.request.build_opener()  构建 Opener,参数为上面设置的代理urllib.request.install_opener()  安装 Opener,参数为上面构建的 openerurllib.request.HTTPCookieProcessor()  cookie 操作,参数为 http.cookiejar.CookieJar() 得到的 cookie

from urllib import request,parse#urlurl = ‘http://fanyi.baidu.com/sug‘#request datadata = {‘kw‘: ‘python‘}data = parse.urlencode(data).encode(‘utf-8‘)#proxyproxy = {‘http‘: ‘120.194.18.90:81‘}proxy_handler = request.ProxyHandler(proxy)opener = request.build_opener(proxy_handler)request.install_opener(opener)#headers = {#    ‘Content-Length‘: len(data),#    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0‘#}#req = request.Request(url=base_url, data=data, headers=headers)req = request.Request(base_url, data)req.add_header(‘User-Agent‘, ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0‘)rsp = request.urlopen(req)result = rsp.read().decode(‘utf-8‘)print(result)
#rsp 的属性print(‘返回数据类型: {}‘.format(type(rsp)))print(‘返回数据信息: {}‘.format(rsp))print(‘header 信息: {}‘.format(rsp.info()))print(‘header 信息: {}‘.format(rsp.getheaders()))print(‘header 属性信息: {}‘.format(rsp.getheader(‘Server‘)))print(‘响应状态信息: {}‘.format(rsp.status))print(‘响应状态信息: {}‘.format(rsp.getcode()))print(‘响应的 URL: {}‘.format(rsp.geturl()))
#cookie 操作from urllib import requestfrom http impot cookiejar#获取 cookiecookie = cookiejar.CookieJar()handler = request.HTTPCookieProcessor(cookie)opener = request.build_opener(handler)rsp = opener.open(‘http://www.baidu.com‘)res = rsp.read().decode(‘utf-8‘)print(res)#保存 cookie#FileCookieJar、MozillaCookieJar、LWPCookieJar,不同的保存格式filename = ‘cookie.txt‘cookie = cookiejar.MozillaCookieJar(filename)handler = request.HTTPCookieProcessor(cookie)opener = request.build_opener(handler)rsp = opener.open(‘http://www.baidu.com‘)cookie.save(igonre_discard=True, ignore_expires=True)#使用 cookiecookie cookiejar.MozillaCookieJar()cookie.load(‘cookie.txt‘, ignore_discard=True, ignore_expires=True)handler = request.HTTPCookieProcessor(cookie)opener = request.build_opener(handler)rsp = opener.open(‘http://www.baidu.com‘)res = rsp.read().decode(‘utf-8‘)print(res)

二、urllib.parse

urllib.parse.urlparse()  将 URL 解析成元组形式

    参数:

      url,访问 url

      scheme,解析协议,https、http

      allow_fragments=False,是够带有查询参数 

urllib.parse.urlunparse()  将元组拼接成完整 urlurllib.parse.urljoin()  拼接 url

  

#1url = ‘https://www.baidu.com/s?‘qs = {‘wd‘:‘python‘}qs = urllib.parse.urlparse(qs)full_url = url + qs#2url = urllib.parse.urlparse(‘http://www.baidu.com/s?wd=python‘)print(url)#3data = [‘http‘, ‘www.baidu.com‘, ‘s‘, ‘wd=python‘]print(urllib.parse.urlunparse(data))#4print(urllib.parse.urljson(‘http://www.baidu.com‘, ‘index.html‘))

三、urllib.error

  通过 try...except 可以捕捉异常,error 分为 HTTPError,URLError

try:    res = urllib.request.urlopen(url).open().decode(‘utf-8‘)    print(res)except urllib.error.URLError as e:    print(e)except urllib.error.HTTPError as e:    print(e)except Exception as e:    print(e)

四、urllib.robotparser

Python 爬虫 --- urllib

评论关闭