欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    Python 爬虫库 urllib 使用详解.docx

    • 资源ID:6746218       资源大小:77.93KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Python 爬虫库 urllib 使用详解.docx

    Python爬虫库urllib使用详解一、Pythonurllib库Pythonurllib库用于操作网页URL,并对网页的内容进行抓取处理。Python3的urllibourllib包包含以下几个模块:urllib.request-打开和读取URLo urllib.error-包含UrIlib.request抛出的异常。 urllib.parse-解析URLo urllib.robotparser-解析robots.txt文件。需要用的就是每个模块的内置方法和函数。大概方法如下图:readOdecodeOgeturlQinfoOgetcodeOerror.URLErrorOreasonreasoncodeheaderseror.ContetToSho11ErrorOrobotparser.RobotFiIeParserQset_url(urreadOsite_map二、UrHib.request模块urllib.request定义了一些打开URL的函数和类,包含授权验证、重定向、浏览器Ce)OkieS等。urllib.request可以模拟浏览器的一个请求发起过程。这里主要介绍两个常用方法,urlopen和Requesto1. urlopen函数语法格式如下:urllib.request.urlopen(url,data=None,timeout,*lCafiIe=None,capath=None,CadefauIt=FaIse,Context=None)url:url地址。data:发送到服务器的其他数据对象,默认为None0timeout:设置访问超时时间。cafile和capath:cafile为CA证书,capath为CA证书的路径,使用HTTPS需要用到。cadefault:已经被弃用。context:SSLSSLCOnteXt类型,用来指定SSL设置。示例:importurllibrequest#导入UHlibreques七模块UrI=UrIIib-requestarlopen("h七七ps:/wwwbaiducomu)#打开读取baidu信息print(ur!read()-decode(lutf-8,)#"»获取所有信息,并decode。命令将网页的信息进行解码运行结果:<!DOCTYPEhtml><!-STATUSOK-XhtmIxheadxmetahttp-Squiv=nContent-Type"content="text/html;charset=utf-8"><metahttp-equiv=X-UA-CompatibIe"content="IE=edgezchrome=1"><metacontent="always"name="htmlcolor:#000;overflow-y:scroll;overtlow:-moz-scrollbarsbody,button,input,select,textareafont-size:12px;font-family:AriaI,sans-serifhl,h2,h3,h4,h5,h6font-size:100%)emfont-style:normalsmallfont-size:12pxolfullist-stylemoneatext-decoration:nonea:hovertext-decoration:underlinelegendcolor:#000fieldsetimgborderObutton,inputzselect,t×tareafont-size:100%response对象是http.client.HTTPResponse类型,主要包含read、readinto>getheadergetheadersfileno等方法,以及msg>versionstatus>reason>debuglevekclosed等属性。常用方法:read():是读取整个网页内容,也可以指定读取的长度,如read(300)o获取到的是二进制的乱码,所以需要用到decode。命令将网页的信息进行解码。 readline()-读取文件的一行内容。 readlines()-读取文件的全部内容,它会把读取的内容赋值给一个列表变量。 info():返回HTTPMeSSage对象,表示远程服务器返回的头信息。 getcode():返回HttP状态码。如果是http请求,200请求成功完成;404网址未找到。 geturl():返回请求的UrI。2、Request类我们抓取网页一般需要对headers(网页头信息)进行模拟,否则网页很容易判定程序为爬虫,从而禁止访问。这时候需要使用到urllib.request.Request类:classurllib.request.Request(url,data=Noe,headers=,origin_req_host=None,UnverifiabIe=FaIse,method=None) url:url地址。data:发送到服务器的其他数据对象,默认为None0headers:HTTP请求的头部信息,字典格式。origin_req_host:请求的主机地址,IP或域名。unverifiable:很少用整个参数,用于设置网页是否需要验证,默认是False0。method:请求方法,如GET、POST、DELETE.PUT等。示例:importurllibrequest#导入模块url="卜七七awwwbaidaCom”#网页连接headers=“UseLAgent":"用。ZJlIa50(WindowsNT100;UJin64;x64)APPIeuJebKi七53736(KHTHJHkeGeCkO)Chrome/8003987122SaFari53736"# 定义headers,模拟浏览器访问req=urllibrequest-Requesturl=urlfheadersheaders)# 模拟浏览器发送,访问网页response=IArIIib-requestirlopen(req)# 获取页面信息printCresponseread()decode(,utf-8n)三、UrHib.error模块urllib.error模块为urllib.request所引发的异常定义了异常类,基础异常类是URLErrorourllib.error包含了两个方法,URLError和HTTPErroroURLError是OSErrOr的一个子类,用于处理程序在遇到问题时会引发此异常(或其派生的异常),包含的属性reason为引发异常的原因。HTTPError是URLError的一个子类,用于处理特殊HTTP错误例如作为认证请求的时候,包含的属性code为HTTP的状态码,reason为引发异常的原因,headers为导致HTTPError的特定HTTP请求的HTTP响应头。区别:URLError封装的错误信息一般是由网络引起的,包括UH错误。HTTPError封装的错误信息一般是服务器返回了错误状态码。关系:URLErrOr是OSERROR的子类,HTTPElTOr是URLErTOr的子类。1.URLError示例fromurllibimportrequestfromurllibimporterrorif_name_=_main_":#一个不存在的连接url="h七七p:/wwwbaiiiduuuu,com/"req=requestRequest(ur!)try:response=requestur!open(req)htm!=responseread()decode(,utf8,)print(htm!)excepterror-URLErrorase:print(ereason)返回结果:Errno-2Nameorservicenotknownreason:此错误的原因。它可以是一个消息字符串或另一个异常实例。2.HTTPError示例fromurllibimportrequestIfromUrlIibimporterror-namemainurl=“http:WWWreq=request.Request(url)try:response=request.urlopen(req)html=response,read().decode(Utf-8l面Q(html)excepterror.HTTPErrorase:Q(e.code)返回结果:code一个HTTP状态码,具体定义见RFC2616o这个数字的值对应于存放在http.server.BaseHTTPRequestHandler.responses代码字典中的某个值。reason这通常是一个解释本次错误原因的字符串。headers导致HTTPError的特定HTTP请求的HTTP响应头。3.URLEITOr和HTTPErTOr混合使用注意:由于HTTPError是URLError的子类,所以捕获的时候HTTPError要放在URLError的上面。示例:fromurllibimportrequestfromurllibimporterrorif_name_="_main_,t:# 网站服务器上不存在资源url="h七七p:/www,baiduComnoh七ml"req=request*Request(url)try:response=request-urlopen(req)# html=response-read()decode(,utf8,)excepterror-HTTPErrorase:print(ecode)excepterror-URLErrorase:print(ecode)如果不用上面的方法,可以直接用判断的形式。fromurllibimportrequestfromurllibimporterrorif_name_="_main_z,;# 网站服务器上不存在资源url=,httptwAbaiducom/nohtm!nreq=request*Request(url)try:response=requestur!open(req)# html=response-read()decode(tutf8,)excepterror-URLErrorase:ifhasattr(e,code,):Prin七("HTTPError")print(ecode)elifhasattr(ef,reason1):Prin七("URWror")print(ereason)执行结果:HTTPError404U!urllib.parse 模块模块定义的函数可分为两个主要门类:URL解析和URL转码。4.1URL解析urllib.parse用于解析URL,格式如下:allow_fragments=True)UrIlib.parse.urlparse(uristring,SCheme二urlstring为字符串的Url地址,scheme为协议类型。allow.fragments参数为false,则无法识别片段标识符。相反,它们被解析为路径,参数或查询组件的一部分,并fragment在返回值中设置为空字符串。标准链接格式为:SCheme:netlocPath;Params?quer对象中包含了六个元素,分别为:协议(SCheme)、域名(netloc)、路径(Path)、路径参数(ParamS)、查询参数(query)、片段(fragment)。示例:fromIArIIib-parseimportUrIParSeo=urlparse(uhttps:/docs-python-or/z.h-cn3libraryurllibparse"七ml#module-Urllibparse")print(,schemeotscheme)print(,net!oconet!oc)print(lpatho,ath)print(,paramsoparams)PrintCqUery0.query)Prin七CFragmer)七ofragment)Print(%os七name:',ohostname)执行结果:scheme:httpsnetloc:docs.python.orgpath:zh-cn3libraryurllib.parse.htmlparams:query:fragment:module-urllib.parsehostname:docs.python.org以上还可以通过索引获取,如通过SSlE(o0)rint(o5)4.1.2 urlunparse()UrlUnParSe()可以实现URL的构造。(构造URL)UrIUnParSe()接收一个是一个长度为6的可迭代对象,将URL的多个部分组合为一个URL。若可迭代对象长度不等于6,则抛出异常。示例:fromUrHibparseimportUrlUr)ParSeUrLCOmPoS=,http,f,iLVLvbaiducom,t,indexhtm!,t,user=test,i,a-6,i'comment1print(ur!unparse(UrLComPoS)结果:http:WWW4.1.3 urlsplit()urlsplit()函数也能对URL进行拆分,所不同的是,urlsplit()并不会把路径参数(ParamS)从路径(Path)中分离出来。当URL中路径部分包含多个参数时,使用UrIparseQ解析是有问题的,这时可以使用UrIspIitO来解析.4.1.4 UrIspIitOUrIUnSPlit()与UrIUnParSe()类似,(构造URL),传入对象必须是可迭代对象,且长度必须是5。示例:fromurllibparseimportUrlunsplitUrLComPoS=Ch七七p'wwwbaiducom','indeh七ml','user=test,i,a=2,print(UrIUrJSPIi七(UrLCOmPoS)urlunsplit()结果:http:WWW4.1.5 urljoin()同样可以构造URLo传递一个基础链接,根据基础链接可以将某一个不完整的链接拼接为一个完整链接.注:连接两个参数的url,将第二个参数中缺的部分用第一个参数的补齐,如果第二个有完整的路径,则以第二个为主。4.2URL转码python中提供urllib.parse模块用来编码和解码,分别是urlencode()与unquote()o4.2.1 编码quote(string)URL转码函数的功能是接收程序数据并通过对特殊字符进行转码并正确编码非ASCII文本来将其转为可以安全地用作URL组成部分的形式。它们还支持逆转此操作以便从作为URL组成部分的内容中重建原始数据,如果上述的URL解析函数还未覆盖此功能的话语法:IUrllib.parse.quote(string, Safe= 7'encoding = None, errors = None)使用%xx转义符替换string中的特殊字符。字母、数字和等字符一定不会被转码。在默认情况下,此函数只对URL的路径部分进行转码。可选的safe形参额外指定不应被转码的ASCII字符-其默认值为7,ostring可以是Str或bytes对象。示例:fromUrllibimportparseurl="卜七七p:/WWWbaiducoms?Wd=O"words=爬虫#的。匕只能对字符串进行编码query_strifig=parse-quote(words)url=UrlForma七(query_s七ring)print(url)执行结果:http:WWWs7wd=%E7%88%AC%E8%99%AB4.2.2编码UrlenCode()quote。只能对字符串编码,而UrIenCOde()可以对查询字符串进行编码。#导入ParSe模块fromurllibimportparse#调用parse模块的urecode进行编码query_s七ring=f'wd'飕虫?result=parse-ur!encode(query_strin)#函数格式化字符串,进行Ur/拼接url='h七七p:/7wwwbaiduComs7'FOrma七(result)print(url)结果:IhttP:/WWW4.2.3解码Unquote(String)解码就是对编码后的url进行还原。示例:fromUrllibimportparsestring=,%7%88%C%E8%99%B,result=ParSeunquo七e(s七ring)print(result)执行结果:爬虫五、UrHibrobotparser模块(在网络爬虫中基本不会用到,使用较少,仅作了解)urllib.robotparser用于解析robots.txt文件。robots.txt(统一小写)是一种存放于网站根目录下的robots协议,它通常用于告诉搜索引擎对网站的抓取规则。RobotS协议也称作爬虫协议,机器人协议,网络爬虫排除协议,用来告诉爬虫哪些页面是可以爬取的,哪些页面是不可爬取的。它通常是一个robots.txt的文本文件,一般放在网站的根目录上。当爬虫访问一个站点的时候,会首先检查这个站点目录是否存在robots.txt文件,如果存在,搜索爬虫会根据其中定义的爬取范围进行爬取。如果没有找到这个文件,搜索爬虫会访问所有可直接访问的页面。urllib.robotparser提供了RobotFiIeParser类,语法如下:CIaSSUrIlib.robotparser.RobotFiIeParser(url=这个类提供了一些可以读取、解析robots.txt文件的方法:set_url(url)-设置robots.txt文件的URL0 read()-读取robots.txtURL并将其输入解析器。 parse(lines)-解析行参数。 can_fetch(useragent,url)-如果允许useragent按照被解析robots.txt文件中的规则来获取Url则返回Trueo mtime()-返回最近一次获取robots.txt文件的时间。这适用于需要定期检查robots.txt文件更新情况的长时间运行的网页爬虫。 modified()-将最近一次获取robots.txt文件的时间设置为当前时间。 CraWLdelay(USeragent)-为指定的useragent从robots.txt返回Crawl-delay形参。如果此形参不存在或不适用于指定的useragent或者此形参的robots.txt条目存在语法错误,则返回Noneo request_rate(useragent)-以namedtupleRequestRate(requests,seconds)的形式从robots.txt返回Request-rate形参的内容。如果此形参不存在或不适用于指定的useragent或者此形参的robots.txt条目存在语法错误,则返回None0 site_maps()-以list()的形式从robots.txt返回Sitemap形参的内容。如果此形参不存在或者此形参的robots.txt条目存在语法错误,则返回Noneo

    注意事项

    本文(Python 爬虫库 urllib 使用详解.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开