Python自带爬虫库urllib使用大全( 二 )


urllib.request.ProxyHandler({'http':'http://fsdfffs.com','https':'https://fsdfwe.com'})这样就可以避免同一个IP访问网站多次被封的尴尬局面了 。
import urllib.requestproxy_handler = urllib.request.ProxyHandler({ 'http': 'http://127.0.0.1:8000', 'https': 'https://127.0.0.1:8000'})opener = urllib.request.build_opener(proxy_handler) #构建代理池response = opener.open('https://book.qidian.com/info/1014243481#Catalog') #代理访问网站print(response.read)

Python自带爬虫库urllib使用大全

文章插图
可以看出,由于本人使用无用的IP导致链接错误,所以此时应该处理异常 。
Python自带爬虫库urllib使用大全

文章插图
换了种处理异常的方式,不过总的来说还是比较全面的 。异常模块中有两个异常错误:
URLError,HTTPError,其中HTTPError是URLError的子类,URLError 里只有一个属性:reason,即抓异常的时候只能打印错误信息,类似上面的例子 。
HTTPError 里有三个属性:code,reason,headers,即抓异常的时候可以获得code,reson,headers三个信息,
import socketimport urllib.requestimport urllib.erroraa=''try: response = urllib.request.urlopen('https://book.qidian.com/info/1014243481#Catalog', timeout=0.1) aa=response.read.decode('utf8')except urllib.error.URLError as e: print(e.reason) if isinstance(e.reason,socket.timeout): print("time out")except urllib.error.HTTPError as e:print(e.reason,e.code)finally: print(aa)除此之外,它还可以处理cookie数据,不过要借助另一个模块 http 。
import http.cookiejar, urllib.requestcookie = http.cookiejar.CookieJar #创建cookiejar对象handler = urllib.request.HTTPCookieProcessor(cookie) 建立cookie请求opener = urllib.request.build_opener(handler) #构建请求response = opener.open('https://www.baidu.com') #发送请求for item in cookie: print(item.name+"="+item.value) #打印cookie信息同时cookie可以写入到文件中保存,有两种方式http.cookiejar.MozillaCookieJar和http.cookiejar.LWPCookieJar,想用哪种自己决定 。
http.cookiejar.MozillaCookieJar方式
import http.cookiejar, urllib.requestfilename = "cookie.txt"cookie = http.cookiejar.MozillaCookieJar(file_name)handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler)response = opener.open('https://www.baidu.com')cookie.save(ignore_discard=True, ignore_expires=True)#保存信息http.cookiejar.LWPCookieJar方式
import http.cookiejar, urllib.requestfilename = 'cookie.txt'cookie = http.cookiejar.LWPCookieJar(file_name)handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler)response = opener.open('https://www.baidu.com')cookie.save(ignore_discard=True, ignore_expires=True)如果想要通过获取文件中的cookie获取的话可以通过load方式,它也有两种方式,http.cookiejar.MozillaCookieJar和http.cookiejar.LWPCookieJar,想用哪种自己决定 。
http.cookiejar.MozillaCookieJar方式
import http.cookiejar, urllib.requestcookie = http.cookiejar.MozillaCookieJarcookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler)response = opener.open('https://www.baidu.com')print(response.read.decode('utf-8'))http.cookiejar.LWPCookieJar方式
import http.cookiejar, urllib.requestcookie = http.cookiejar.LWPCookieJarcookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler)response = opener.open('https://www.baidu.com')print(response.read.decode('utf-8'))urllib parse模块
它是负责解析页面内容,模块下有一个urlparse方法用于拆分解析内容,具体用法如下:
urllib.parse.urlparse(url,scheme)URL:页面地址
scheme: 协议类型,比如 http https


推荐阅读