python的urllib四大模块_Python核心模块之urllib用法详解【Python每日一个知识点第79期】...

urllib是Python内建的核心模块之一,主要用于各种网页请求的构造。这个模块操作非常简单,而且功能比较强大,是爬虫入门的不二之选。今天我们为大家整理了urllib库的一些核心用法,帮助大家更快的掌握其用法。Python爬虫项目中常用的requests库即时基于urllib构建的。

Geturllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:

例如,对豆瓣的一个URLhttps://api.douban.com/v2/book/2129650进行抓取,并返回响应:

fromurllibimportrequestwithrequest.urlopen('https://api.douban.com/v2/book/2129650')asf:data=f.read()print('Status:',f.status,f.reason)fork,vinf.getheaders():print('%s:%s'%(k,v))print('Data:',data.decode('utf-8'))可以看到HTTP响应的头和JSON数据:Status:200OKServer:nginxDate:Tue,26May201510:02:27GMTContent-Type:application/json;charset=utf-8Content-Length:2049Connection:closeExpires:Sun,1Jan200601:00:00GMTPragma:no-cacheCache-Control:must-revalidate,no-cache,privateX-DAE-Node:pidl1Data:{"rating":{"max":10,"numRaters":16,"average":"7.4","min":0},"subtitle":"","author":["廖雪峰编著"],"pubdate":"2007-6",...}如果我们要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头,我们就可以把请求伪装成浏览器。例如,模拟iPhone6去请求豆瓣首页:fromurllibimportrequestreq=request.Request('http://www.douban.com/')req.add_header('User-Agent','Mozilla/6.0(iPhone;CPUiPhoneOS8_0likeMacOSX)AppleWebKit/536.26(KHTML,likeGecko)Version/8.0Mobile/10A5376eSafari/8536.25')withrequest.urlopen(req)asf:print('Status:',f.status,f.reason)fork,vinf.getheaders():print('%s:%s'%(k,v))print('Data:',f.read().decode('utf-8'))这样豆瓣会返回适合iPhone的移动版网页:......

Post如果要以POST发送一个请求,只需要把参数data以bytes形式传入。

我们模拟一个微博登录,先读取登录的邮箱和口令,然后按照weibo.cn的登录页的格式以username=xxx&password=xxx的编码传入:

fromurllibimportrequest,parseprint('Logintoweibo.cn...')email=input('Email:')passwd=input('Password:')login_data=parse.urlencode([('username',email),('password',passwd),('entry','mweibo'),('client_id',''),('savestate','1'),('ec',''),('pagerefer','https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')])req=request.Request('https://passport.weibo.cn/sso/login')req.add_header('Origin','https://passport.weibo.cn')req.add_header('User-Agent','Mozilla/6.0(iPhone;CPUiPhoneOS8_0likeMacOSX)AppleWebKit/536.26(KHTML,likeGecko)Version/8.0Mobile/10A5376eSafari/8536.25')req.add_header('Referer','https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')withrequest.urlopen(req,data=login_data.encode('utf-8'))asf:print('Status:',f.status,f.reason)fork,vinf.getheaders():print('%s:%s'%(k,v))print('Data:',f.read().decode('utf-8'))如果登录成功,我们获得的响应如下:Status:200OKServer:nginx/1.2.0...Set-Cookie:SSOLoginState=1432620126;path=/;domain=weibo.cn...Data:{"retcode":20000000,"msg":"","data":{...,"uid":"1658384301"}}如果登录失败,我们获得的响应如下:...Data:{"retcode":50011015,"msg":"u7528u6237u540du6216u5bc6u7801u9519u8bef","data":{"username":"example@python.org","errline":536}}

Handler如果还需要更复杂的控制,比如通过一个Proxy去访问网站,我们需要利用ProxyHandler来处理,示例代码如下:

proxy_handler=urllib.request.ProxyHandler({'http':'http://www.example.com:3128/'})proxy_auth_handler=urllib.request.ProxyBasicAuthHandler()proxy_auth_handler.add_password('realm','host','username','password')opener=urllib.request.build_opener(proxy_handler,proxy_auth_handler)withopener.open('http://www.example.com/login.html')asf:pass

小结urllib提供的功能就是利用程序去执行各种HTTP请求。如果要模拟浏览器完成特定功能,需要把请求伪装成浏览器。伪装的方法是先监控浏览器发出的请求,再根据浏览器的请求头来伪装,User-Agent头就是用来标识浏览器的。

《Python入门每日一个知识点》栏目是马哥教育Python年薪20万+的学员社群特别发起,分享Python工具、Python语法、Python项目等知识点,帮助大家快速的了解Python学习,快速步入Python高薪的快车道。

【超全整理】《Python自动化全能开发从入门到精通》python基础教程笔记全放送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值