python3中urllib.request模块学习

原创 Laughing  2018-10-07 12:57  阅读 130 次 评论 1 条

urllib提供了一系列用于操作URL的功能。包含urllib.request,urllib.error,urllib.parse,urllib.robotparser四个子模块。
这篇文章我们重点学习一下urllib.request

urllib.request.urlopen

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

-         url:  需要打开的网址

-         data:Post提交的数据

-         timeout:设置网站的访问超时时间

urlopen返回对象提供方法:

-         read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作

-         info():返回HTTPMessage对象,表示远程服务器返回的头信息

-         getcode():返回Http状态码。如果是http请求,200请求成功完成 ; 404网址未找到

-         geturl():返回请求的url

GET

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

  1. from urllib import request  
  2.   
  3. with request.urlopen('https://www.lisen.me') as f:  
  4.     if f.status == 200:  
  5.         print(f.read().decode('utf-8'))  
  6.     else:  
  7.         print(f.reason)  

Post

如果要以POST发送一个请求,

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

urlopen()的data参数默认为None,当data参数不为空的时候,urlopen()提交方式为Post。

Post的数据必须是bytes或者iterable of bytes,不能是str,如果是str需要进行encode()编码

使用Request包装请求

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

使用request()来包装请求,再通过urlopen()获取页面。

  1. url= r'http://www.xxxxxxxxxxxxxxxx.com'  
  2. headers = {  
  3.     'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '  
  4.                   r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',  
  5.     'Referer': r'http://www.xxxxxxxxxxxxxxxx.com',  
  6.     'Connection': 'keep-alive'  
  7. }  
  8. req = request.Request(url, headers=headers)  
  9. page = request.urlopen(req).read()  
  10. page = page.decode('utf-8')  
本文地址:https://www.lisen.me/urllib-request-module-learning-in-python3.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情