python3爬虫之Urllib库(二)

在上一篇文章中,我们大概讲了一下urllib库中最重要的两个请求方法:urlopen()  和  Request()

但是仅仅凭借那两个方法无法执行一些更高级的请求,如Cookies处理,代理设置等等。

这是就是Handler大显神威的时候了,简单地说,他是各种处理器,有处理验证登录的,有处理Cookies的,有处理代理设置的。

高级用法

首先说一下urllib。request模块中的BaseHandler类,他是所有类的基类,它提供了最基本的方法,如:default_open()   protocol_request()等。

下边是各种子类: 

  HTTPDefaultErrorHandler      用于处理HTTP响应错误
  HTTPRedirectHandler            用于处理重定向
  HTTPCookieProcessor          用于处理Cookies

  ProxyHandler                         用于设置代理,默认代理为空

  HTTPPasswordMgr               用于管理密码
  HTTPBasicAuthHandler        用于认证管理

还有一个类非常重要,他就是 OpenerDirector   我们称为Opener

为什么说这个类呢?之前使用的Request和urlopen()都是封装好的请求方法,利用它们可以完成请求,但是现在我们要实现高级功能,就需要进行深一层的配置,所以就用到了Opener

下面我们看看例子:

 代理设置:

在使用爬虫难免需要使用到代理,添加代理:

说一下代码:

  这个代理是我从西刺代理上找到的,使用了 ProxyHandler类,他的参数是一个字典,key是协议名,value是代理链接。

  然后再利用Handler及build_opener()方法构造一个opener,然后使用open()方法发送请求即可。

  Cookies

首先我们获取网站的Cookies:

  

  这样输出类每一条Cookie的名称和值

  当然,也可以保存Cookie至文件:(因为Cookie实际上也是以文件形式保存的)

  但是代码要稍做调整,将CookieJar改为 MozillaCookieJar(filename)  它在生成文件时会用到,是CookieJar的子类

  

  这是cookie内容:

  

  

  但是也可以使用   http.cookiejar.LWPCookieJar(filename) 来保存数据,但是格式会和MozillaCookieJar(filename)不大一样:

  

  

  当然,你也可以再网页界面点击F12,手动获取Cookies

  刚刚获取了Cookies,现在我们来在请求时获取本地文件Cookies

  如从本地LWPCookieJar()类型的文本中获取Cookies:

  

 

异常处理

  前面我们讲了发起请求,但是当程序报错是怎么办?脚本就会宕掉,这不是我们想要的,所以就有了异常处理

  (1)URLError  因页面不存在而报错的异常:

    

  (2)HTTPError   是URLError的子类,专门处理HTTP请求错误,如认证失败等。

     有三个属性:

      code:  返回HTTP状态码,如200请求成功, 404网页不存在, 500服务器内部错误等。

      reason: 同父类一样,用于返回错误原因

      headers: 返回请求头

   · 

解析链接

urllib库中还有parse模块,用于对url各部分的抽取、合并及连接转换。

  (1)urlparse()

    这个方法可以识别和分段URL

    

    可以看见,返回的是一个ParseResult类型对象包含六部分。

    由此可见,一个完整的URL由6部分组成: ://  之前是scheme, 代表协议; 第一个/符号前是netloc, 代表域名; 后边是path, 即访问路径; 分号;后边是parms, 代表参数; 问号?后边是query, 代表查询条件; 井号#后边是锚点,用于直接定位页面内部的下拉位置。

    所以一个标准的链接格式:  scheme://netloc/path;params?query#fragment

    利用urlparse()方法可将其拆开

    urlparse方法API:

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

      urlstring:  必填项,是需要操作的url

      scheme;  默认协议,如果url中没有协议,就使用默认协议。

      allow_fragments:是否忽略 fragments  如果被设置为False,fragments就会被忽略,它会被解析为前边的一部分。

  (2)urlunparse()

      用于组成url,接收一个可迭代对象,但它的长度必须为6

      

  (3)urlsplit()

      这个方法和urlsplit()相似,只是不单独解析params部分,只返回5个结果。

      

  (4)urlunsplit()

      这个和urlunparse相似,可以接收列表、元祖等长度为5的参数,组成url

      

  (5)urljoin()

      用于拼接链接  首先有一个base_url参数作为基础链接, 将新链接作为第二个参数传入,这个方法会分析base_url的scheme, netloc, path这三个内容对新链接进行补充(注意是将对第二个链接没有的参数进行补充,有的话并不会进行替换),最终返回结果

      

  (6)urlencode()

    这个方法在构造GET请求时非常有用

    

  (7)parse_qs()

    有序列化,就会有反序列化,这个方法可以将get参数反序列化为字典:

    

  *(8)parse_qsl()方法,用于将参数转化为元组形式的列表, 返回结果每个元组中,第一个参数为参数名,第二个参数为参数值。

    

  (9)quote()

    该方法可以将内容转化为URL编码的格式。 但当url中有中文时有可能会乱码。

    

    

   (10)u你quote()  可以将URL进行解码

    

至此,urllib库基本就已经说完了,如有疑问或建议请评论留言进行补充。不甚感激

  

 

  

  

原文地址:https://www.cnblogs.com/ss-py/p/9945552.html

时间: 2024-08-13 07:41:44

python3爬虫之Urllib库(二)的相关文章

Python爬虫的Urllib库有哪些高级用法?

本文和大家分享的主要是python爬虫的Urllib库的高级用法相关内容,一起来看看吧,希望对大家学习python有所帮助. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我 们就写个例子来扒一个网页下来. imp

Python爬虫之Urllib库的基本使用

Python爬虫之Urllib库的基本使用 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容.比如上面的两行代码,我们可以这么改写 # -*- coding: utf-8 -*- """ Cre

爬虫中urllib库

一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2. 一般是用urllib 库 爬取图片比较方便, requests 库 封装的比 urllib库好多了  二.由易到难的爬虫程序: 1.爬取百度首页面所有数据值 #!/usr/bin/env python # -*- coding:utf-

python爬虫之urllib库

请求库 urllib urllib主要分为几个部分 urllib.request 发送请求urllib.error 处理请求过程中出现的异常urllib.parse 处理urlurllib.robotparser 解析robots.txt -->规定了该网站的爬虫权限 urllib.request方法 data = urllib.request.urlopen(url) #返回response对象 data.read() --->取出网页源代码 (bytes类型,可以通过decode()转成u

web爬虫讲解—urllib库中使用xpath表达式—BeautifulSoup基础

在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata的形式 urllib库中使用xpath表达式 etree.HTML()将获取到的html字符串,转换成树形结构,也就是xpath表达式可以获取的格式 #!/usr/bin/env python # -*- coding:utf8 -*- import urllib.request from lxml import etree #导入htm

python爬虫入门urllib库的使用

urllib库的使用,非常简单. import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 只要几句代码就可以把一个网站的源代码下载下来. 官方文档:https://docs.python.org/2/library/urllib2.html urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefau

python3 爬虫(urllib+beautifulsoup)beautifulsoup自动检测编码错误

版本:Python3.x 运行系统:win7 编辑器:pycharm 爬取页面:携程的一个页面(韩国首尔6日5晚半自助游·直飞+滑雪场或南怡岛+乐天世界+1天自由活动-[携程旅游]) #!/usr/bin/env python3 # -*- coding: utf-8 -*- from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getComm

Python爬虫:urllib库的基本使用

请求网址获取网页代码 import urllib.request url = "http://www.baidu.com" response = urllib.request.urlopen(url) data = response.read() # print(data) # 将文件获取的内容转换成字符串 str_data = data.decode("utf-8") print(str_data) # 将结果保存到文件中 with open("baid

【Python3 爬虫】U11_BeautifulSoup4之select和CCS选择器提取元素

目录 1.常用CSS选择器介绍 1.1 标签选择器 1.2 类名选择器 1.3 id选择器 1.4 查找子孙元素 1.5 查找直接子元素 1.6 根据属性查找 2.实战演练:select和css选择器提取元素 2.1 获取所有的p标签 2.2 获取第2个p标签 2.3 获取所有class等于t3的span标签 2.4 获取class为t1的p标签下的所有a标签的href属性 2.5 获取所有的职位信息(文本) 1.常用CSS选择器介绍 以下是一个包含常用类选择器的案例,在案例后有具体的选择器使用