七、urllib库(一)

python2中,有urllib和urllib2两个库,在python3中统一为urllib库

它是python内置的HTTP请求库,包含了4个模块:

  • request:最基本的HTTP请求模块,用来模拟发送请求,就行浏览器传入URL一样,给库方法传入URL和额外的参数就可以实现
  • error:异常处理模块,如果出现请求错误,可以捕获这些异常,然后进行操作,保证程序不会以为终止
  • parse:工具模块,提供了URL处理方法,比如拆分、解析、合并
  • robotparser:主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些不可爬

官方文档:

https://docs.python.org/3/library/urllib.request.html

发送请求:

urllib.request模块:

1、urlopen()

urllib.request模块最基本的构造HTTP请求方法,可以模拟浏览器一个请求发起的过程,还带有处理授权验证、重定向、浏览器Cookies和其他内容

抓取python官网

查看返回的类型

是一个HTTPResponse类型,主要包含方法:

read()

readinto()

getheader(name)

getheaders()

fileno()

主要包含属性:

msg

version

status

reason

debuglevel

closed

urlopen()参数

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

  • data参数
  • data是可选参数,bytes类型,如果不是就需要通过bytes()方法转化,如果穿了data参数,那么请求方式就是POST,反之就是GET
  • bytes()方法的第一个参数需要是字符串类型,使用urllib.parse.urlencode()方法将参数字典转换成字符串;第二个参数是指点编码格式
  • 结果看到传的参数在form字段,表示模拟表单方式,以POST方式传输

 timeout参数

用户设置超时时间,单位是秒,如果请求超过这个时间还没有响应,就抛出异常

超时的话会抛出超时

捕获异常

context:必须是ssl.SSLContext类型,用于指点SSL设置

cafile、capath:指定CA证书和它的路径

cadefault:默认是false,已经弃用

Request参数 

发送请求依然使用urlopen()方法,只不过参数使用Request类型的对象

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

url:请求的URL,必传

data:必须是bytes类型,如果是字典,先用rullib.parse模块里的 urlencode()编码

headers:请求头,字典形式,可以在参数直接构造,也可以通过调用add_header()方法添加

origin_req_host:请求方的host名或者IP地址

unverifiable:默认是flase,表示请求是否是无法验证的,也就是用户有没有权限来接收这个请求的结果

method:字符串形式,指定请求的方式

 高级用法Handler

urllib.request中的BaseHandler类,是其他所有Handler的父类,提供了最基本的方法,defult_open()、protocol_request()等

各种继承这个BaseHandler父类的Handler子类:

  • HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常
  • HTTPRedirectHandler:处理重定向
  • HTTPCookieProcessor:处理Cookies
  • ProxyHandler:设置代理,默认代理为空
  • HTTPPasswordMgr:管理密码,维护了用户名和密码的表
  • HTTPBasicAuthHandler:管理认证,如果打开链接需要认证,用它可以解决
  • 还有其他类,查看所有的官方文档:
  • httos://docs.python.org/3/library/urllib.request.html#urllib.request.BaseHandler

OpenerDirector类

  • 简称Opener,urlopen()方法就是urllib提供的一个Opener
  • Request和urlopen相当于类库为我们封装了常用的一些方法,利用这些可以完成基本的请求,想要完成更高级的功能,需要使用更底层的实例完成,就用到了Opener
  • Opener可以使用open()方法,和urlopen()一样

利用Handler来构建Opener

实例:

1、验证

例如打开网站时弹框提示登录,登录后才可以查看页面

  • 实例化HTTPPasswordMgrWithDefaultRealm对象,它利用add_password()添加用户名密码,这样就建立了一个处理验证的Handler
  • 利用这个Handler使用build_opener()方法构建一个Opener,这个Opener在方式请求时就相当于已经验证成功了
  • 然后Opener利用open()方法打开连接就可以完成验证,获取到的就是验证后的页面源代码

2、代理

爬虫免不了做代理,添加代理

使用ProxyHandler,参数是一个字典,键名是协议类型,如:HTTP或者HTTPS,值是代理链接,可以添加多个代理

然后利用这个Handler及build_opener()方法构造一个Opener,之后发送请求

3、Cookies

将网站的Cookies获取下来,打印

首先声明一个CookieJar对象,然后利用HTTPCookieProcessor来构建一个Handler,最后利用build_opener()方法构建出Opener,执行open()方法

输出成文件格式

CookieJar换成MozillaCookieJar,生成文件时用,是CookieJar的子类,用来处理Cookie和文件相关的事,比如读取、保存,可以将Cookie保存成Mozilla型浏览器的Cookie形式

LWPCookieJar同样可以读取和保存Cookie,但是保存的格式和MozillaCookieJar不一样,它会保存成libwww-perl(LWP)格式的Cookie文件

 读取并使用Cookie

lod()方法用来读取本地Cookie文件,获取内容,然后构建Handler和Opener完成操作

官方文档:

https://docs.python.org/3/library/urllib.request.html#basehandler-objects

原文地址:https://www.cnblogs.com/Mr-chenshuai/p/9127409.html

时间: 2024-11-05 14:38:56

七、urllib库(一)的相关文章

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

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

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

Python爬虫入门三之Urllib库的基本使用

转自:http://cuiqingcai.com/947.html 那么接下来,小伙伴们就一起和我真正迈向我们的爬虫之路吧. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我们就写个例子来扒一个网页下来. impor

Python3网络爬虫——二、Urllib库的基本使用

一.什么是Urllib Urllib库是Python自带的一个http请求库,包含以下几个模块: urllib.request 请求模块 urllib.error   异常处理模块 urllib.parse   url解析模块 urllib.robotparser  robots.txt解析模块 其中前三个模块比较常用,第四个仅作了解. 二.Urllib方法介绍 将结合Urllib的官方文档进行说明.首先是urllib.request模块: urllib.request.urlopen(url,

Python爬虫入门之Urllib库的高级用法

1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS,CSS 等等,经过多次

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

转 Python爬虫入门四之Urllib库的高级用法

静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般

python爬虫---urllib库的基本用法

urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块: urllib.request   请求模块 urllib.error   异常处理模块 urllib.parse   url解析模块 urllib.robotparse    robots.txt解析模块 下面是一些urllib库的使用方法. 使用urllib.request import urllib.request response = urllib.request.urlopen(

Python爬虫--Urllib库

Urllib库 Urllib是python内置的HTTP请求库,包括以下模块:urllib.request (请求模块).urllib.error( 异常处理模块).urllib.parse (url解析模块).urllib.robotparser (robots.txt解析模块) 一.urllib.request 请求模块 1.urllib.request.urlopen urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=N