urllib库的基本使用

5 篇文章 0 订阅
4 篇文章 0 订阅

urllib库介绍

urllib是python3内置的HTTP请求库,包含request,error,parse,robotparser四个基本模块,分别用于发送请求,异常处理,URL解析处理,识别robots协议。

request模块

  1. urlopen() 方法
urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)
  • data参数:可以添加参数,但参数必须是bytes类型,可通过bytes()方法转化。
  • timeout参数:用于设置响应超时时间,单位为秒。
  • 其他参数:context用来指定SSL设置,cafile和capath用来指定CA证书和它的路径,cadefault已弃用。
  1. Request类
    由于urlope()仅可实现最基本的请求,如果要在请求中加入headers等信息时便无能为力,此时可借用更强的Request类来构建请求。
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None
  • url参数:需要访问的URL,必传参数。
  • data参数:可以添加参数,但参数必须是bytes类型。
  • headers参数:可通过headers构造请求头。(也可通过add_header()方法添加请求头)
  • method参数:用来指定请求使用的方法(如GET,POST等)
  1. 高级用法
    前面只构造了基本的请求,但对于一些比较高级的操作(如Cookies处理,代理设置等)只能望而却步。 但urllib库提供了利用Handler来构建Opener来实现这些操作。
  • HTTPBasicAuthHandler :用于管理认证。
from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
username = 'username'
password = 'password'
url = 'http://localhost:5000/'

p = HTTPPasswordMgrWithDefaultRealm()
p.add_password(None,url,username,password)
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler)

result = opener.open(url)
html = result.read().decode('utf-8')
  • ProxyHandler : 用于设置代理。
from urllib.request import ProxyHandler, build_opener

proxy_handler = ProxyHandler({
    'http':'http://127.0.0.1:9743',
    'https':'https://127.0.0.1:9743'
})
opener = build_opener(proxy_handler) 
response = opener.open('https://www.baidu.com')
  • HTTPCookieProcessor : 用于处理Cookies。
import http.cookiejar, urllib.request

#cookie = http.cookiejar.LWPCookieJar(finame='cookies.txt')  将cookie保存为LWP格式
cookie = http.cookiejar.MozillaCookieJar(filename='cookies.txt') #将cookie保存为Mozilla型浏览器的cookies格式
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

既然可以保存cookie到文件中,那肯定也可以从文件中提取cookie来使用。

import http.cookiejar, urllib.request

cookie = http.cookiejar.MozillaCookieJar()
cookie.load('cookies.txt',ignore_discard=True,ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

error模块

error定义了由request模块产生的异常,如果出现了问题,request模块便会抛出error模块中定义的异常。

  • URLError类 : 继承自OSError类,是error模块的基类,由request模块产生的异常都可以捕获这个类来处理,有一个属性reason来返回错误的原因。
  • HTTPError类:URLError的子类,专门处理HTTP请求错误,有一下三个属性。
    • code :返回HTTP状态码。
    • reason :同父类一样,用于返回错误的原因。
    • headers :返回请求头。
  • 写异常处理时记得先捕捉子类的异常,再捕捉父类的异常。

parse模块

parse模块定义了处理URL的借口,可实现URL各部分的抽取,合并,分离等。常用的方法如下:

  • urlparse() :将url拆分为标准链接格式的6各部分。(标准链接格式:scheme://netloc/path;params?query#fragment 即协议://域名/路径;参数?查询条件#锚点)
  • urlunparse() :接受一个可迭代对象(长度必须为6),将其拼接成URL。
  • urlsplit() :与urlparse()大体相同,只是不解析params这部分,params会合并到path中,拆分后只返回五个结果。
  • urlunsplit() :接受一个可迭代对象(长度必须为5),将其拼接成URL。
  • urljoin() :第一个参数为基本URL,第二个参数为新链接,基本URL提供了三项内容scheme,netloc,path。如果这三项在新链接中不存在就予以补充。(返回的结果是新链接)
  • urlencode() :将字典转化为字符串。
  • parse_qs() :将字符串转化为字典。
  • parse_qsl() :将字符串转化为元组组成的列表。
  • quote() :将中文字符转化为URL编码。
  • unquote() :将URL编码解码还原。

robotparser模块

  • robots协议:也成爬虫协议,告诉爬虫和搜索引擎那些目录可以抓取,哪些不可以抓取,通常是位于网站根目录下的名为robots.txt的文本文件。
User-agent : *
Disallow : /
Allow : /public/

上述robots协议便是对所有爬虫只允许爬取public目录。

  • RobotFileParser类 :用来解析robots.txt。
    • set_url()方法:用来传入robots.txt文件的URL。
    • read()方法:读取robots.txt,这个方法执行了才能执行后续操作
    • parse()方法:用来解析robots.txt。
    • can_fetch()方法:第一个参数为user-agent,第二个参数为要访问的URL,方法返回的是该user-agent是否能访问这个URL(True或False)。
    • mtime()方法:返回上次抓取和分析robots.txt的时间。
    • modified()方法:将当前时间设置为上次抓取和分析robots.txt的时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值