python3中urllib库_Python3中的Urllib库——小白第一周学习笔记(2)

一、Urllib库——Python内置的HTTP请求库

urllib.request         请求模块(模拟发送请求)

urllib.error             异常处理模块

urllib.parse            url解析模块(提供许多url处理方法,如差分,合并)

urllib.robotparser   robots.txt解析模块

二、用法演示

1.urlopen

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,cadefault=False,context=None)

前三个参数使用频率较高,后面几个参数基本不用。

(1)第一个参数 url

1 importurllib.request2

3 response = urllib.request.urlopen('http://www.baidu.com') #get类型的请求4 print(response.read().decode('utf-8'))

5 '''

6 也可以直接声明一个request对象

7 request = urllib.request.Request('http://www.baidu.com')

8 response = urllib.request.urlopen(request)

9 '''

打印输出为:

(2)第二个参数data

1 importurllib.parse2 importurllib.request3

4 data = bytes(urllib.parse.urlencode({'world': 'hello'}), encoding='utf8')5 response = urllib.request.urlopen('http://httpbin.org/post', data=data) #post类型的请求,有data参数时以post形式传递data6 print(response.read())

打印输出为:

b'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "world": "hello"\n }, \n "headers": {\n "Accept-Encoding": "identity", \n "Content-Length": "11", \n "Content-Type": "application/x-www-form-urlencoded", \n "Host": "httpbin.org", \n "User-Agent": "Python-urllib/3.7", \n "X-Amzn-Trace-Id": "Root=1-5e426274-a3f0622e47583590491e9caa"\n }, \n "json": null, \n "origin": "223.88.90.230", \n "url": "http://httpbin.org/post"\n}\n'

(3)第三个参数timeout

1 #代码1——不超时的演示

2 importurllib.request3

4 response = urllib.request.urlopen('http://httpbin.org/get', timeout=1) #1秒,若1秒内得到结果则正常显示

5 print(response.read())

1 #代码2——超时演示

2 importsocket3 importurllib.request4 importurllib.error5

6 try:7 response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1) #0.1秒,超时则执行except块8 excepturllib.error.URLError as e:9 ifisinstance(e.reason, socket.timeout): #若超时,输出TIME OUT10 print('TIME OUT')

代码2打印输出为:

TIME OUT

(4)关于响应

响应类型,状态码,响应头

1 importurllib.request2

3 response = urllib.request.urlopen('http://www.baidu.com')4 print(type(response)) #响应类型5 print(response.status) #状态码6 print(response.getheaders()) #响应头

(5)构造post请求——利用request对象加入headers及formdata

1 from urllib importrequest, parse2

3 url = 'http://httpbin.org/post'

4 headers ={5 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)',6 'Host': 'httpbin.org'

7 }8 dict ={9 'name': 'Germey'

10 }11 data = bytes(parse.urlencode(dict),encoding='utf8')12 req = request.Request(url=url, data=data, headers=headers, method='POST')13 '''

14 也可利用req.add_header()添加headers信息15 req = request.Request(url=url, data=data, method='POST')16 req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64)')17 '''

18 response =request.urlopen(req)19 print(response.read().decode('utf-8'))

2.Cookie

Cookie可以维持登录信息,用来爬取需要登录认证的网页。

1 importhttp.cookiejar,urllib.request2

3 cookie =http.cookiejar.CookieJar()4 handler =urllib.request.HTTPCookieProcessor(cookie) #利用handler处理cookie5 opener =urllib.request.build_opener(handler) #构造opener6 response = opener.open('http://www.baidu.com')7 for item incookie: #输出cookie中的信息8 print(item.name+'='+item.value)

输出结果为:

BAIDUID=DD72491D2B581558F3408ACDEC22350C:FG=1BIDUPSID=DD72491D2B581558D20BEA6F906A04C3

H_PS_PSSID=1461_21105

PSTM=1581496829delPer=0

BDSVRTM=0

BD_HOME=0

3.异常处理

当urlopen不能处理服务器的响应时,会抛出URLError异常。HTTPError的父类是URLError异常。

HTTPError比URLError的信息更详细,HTTPError可以详细的判断异常并返回对应的状态码。

1 #URLError例子

2 from urllib importrequest, error3 try:4 response = request.urlopen('http://cuiqingcai.com/index_html')5 excepterror.URLError as e:6 print(e.reason) #输出为Not Found

1 #HTTPError和URLError对比2 from urllib importrequest, error3

4 try:5 response = request.urlopen('http://cuiqingcai.com/index_html')6 excepterror.HTTPError as e:7 print(e.reason, e.code, e.headers, sep='\n')8 excepterror.URLError as e:9 print(e.reason)10 else:11 print('Request Successfully') #若没有捕获异常,输出Request Successfully

输出结果为:

Not Found404Server: nginx/1.10.3(Ubuntu)

Date: Wed,12 Feb 2020 09:03:53GMT

Content-Type: text/html; charset=UTF-8Transfer-Encoding: chunked

Connection: close

Set-Cookie: PHPSESSID=94j0c7n2t6l640b7hn6or3g680; path=/Pragma: no-cache

Vary: Cookie

Expires: Wed,11 Jan 1984 05:00:00GMT

Cache-Control: no-cache, must-revalidate, max-age=0

Link:; rel="https://api.w.org/"

4.URL解析

(1)urlparse——将url字符串拆分成其组件

urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)

1 #解析url2 from urllib.parse importurlparse3

4 result = urlparse('https://www.baidu.com/index.html;user?id=5#comment')5 print(type(result), result, sep='\n')

输出结果:

ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

(2)urlunparse——参数长度必须为6,构造url

1 from urllib.parse importurlunparse2

3 data = ['https', 'www.baidu.com', 'index.html', 'user', 'a=6', 'comment']4 print(urlunparse(data)) #输出结果为:https://www.baidu.com/index.html;user?a=6#comment

(3)urlencode——把字典转换成请求参数

1 from urllib.parse importurlencode2

3 params ={4 'name': 'jack',5 'age': 20

6 }7 base_url = 'https://www.baidu.com?'

8 url = base_url +urlencode(params)9 print(url) #输出结果为:https://www.baidu.com?name=jack&age=20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值