在python2里边,用urllib库和urllib2库来实现请求的发送,但是在python3种在也不用那么麻烦了,因为只有一个库了:Urllib.

urllib库是python的标准库,简而言之就是不用自己安装,使用时只需要import一下就好。

urllib库包含4个模块:

request: 最基本的HTTP请求模块,用来发起请求,就和人们在浏览器上输入网址来访问网页一样。

error: 异常处理模块,如果在请求时出现错误,用这个模块来抓住异常,保证程序不会因为抛出异常而挂掉。

parse: 一个工具模块,提供了许多URL处理方法,比如URL的拆分、合并等等。

robotparser:主要用来识别目标网站的robot.txt文件(基本用不上)

使用request模块可以发送请求,主要有两个方法: urlopen() Request()

urlopen()

首先来举个栗子:我们来使用urlopen方法来请求“笔趣阁”网站

这是urllib()的API:

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

from urllib import request

target_url = 'http://www.biquge9.com/'

result = request.urlopen(target_url) # 返回的response是类文件对象

print(result.read().decode('utf-8'))

部分结果截图(整个网页内容太多放不下,我仅仅把网页的头部截了下来):

是不是很强大?几行代码就可以扒下想要网页源代码,只要源码在手,里边的内容还不是想怎么拿怎么拿

urllib库的request模块提供了最基本的用来构造HTTP请求的方法,整个请求过程已经完全封装好了,我们只需要调用固定的方法,传给相应的参数就可以发起请求了。

下边我们来分析一下刚刚那几行代码:

from urllib import request # 用来导入urllib库的request模块

result = request.urlopen(target_url) # 使用urlopen方法来请求网页

我们打印一下result的格式:

这是一个HTTPOResponse类型的对象。这个对象我们是无法直接获取网页内容的,但是或者对象包含了许多方法与属性:如 read() readinto() getheader(name) getheaders() fileno() geturl() info() getcode() 等方法和msg version status reason debuglevel closed等属性,通过调用这些方法和属性,我们就可以获取到关于html页面的信息。

方法:

(1)read() 调用read()方法就可以查看到网页的源代码了。但是得到的是bytes字节的类型。

所以我们要用decode()将bytes进行解码得到最终的html源代码

(2)getheaders() 获取返回的rsponse Headers,是一个列表:

这是我在浏览器种输入网址 再按下F12,在控制台种看到的rsponse Header:

(3)getheader('Server') 获取rsponse Headers中的某一个参数

(4)geturl() 获取请求的目标页面的url:

(5)fileno() 以整数的形式返回文件描述符

(6)info() 也是返回rsponse Headers种的内容,但并不是以列表的形式。

(7)getcode() 获取请求的响应码,如200, 403, 404等待。

属性:

status 这个属性的作用和哪个getcode()方法一样,都是返回响应码

msg 这个属性用来判断请求成不成功,成功的话会返回 “OK”

reason 这个和那个msg一样,也是在判定请求是否成功

data参数

可选参数,当你在发起请求时想要传递数据,就可用它,

但是数据需要使用bytes()方法将参数转化为字节流编码,且当传递参数后,请求方式就由get变成post了

timeout参数

用于设置超时时间,单位是秒,如果请求超出了设置时间还没有响应,就会抛出异常,如果不指定参数,就是用全局默认时间,它支持HTTP、HTTPS、FTP请求。

其他参数:

还有其他参数,如context参数, 他必须是ssl。SSLContext类型, 用来指定SSL设置。

cafile和capath参数 用来指定CA证书和他的路径。

Request()

虽然urllib可以发起请求,但是几个简单的参数并不能构建一个完整的请求,比如它就无法加入headers信息,所以才有的Request()

我们同样是使用urlopen()来发起请求,但是并不是直接请求url,而是请求一个Request对象,这样可以将一个请求独立封装为一个对象,而且可以在这个请求对象中配置参数。

这是Request()的构造方法:

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

除了第一个url参数必传,其他都是选传参数

第二个data参数,和urlopen()请求中的data参数一样,必须穿bytes()类型,如果它是字典,就得先用urllib.parse模块中的urlencode()编码。

第三个headers是一个字典,他就是请求头,我们用来来传入请求头,可以在参数中直接传,也可以利用add_header()方法进行添加。而请求头中最重要的就是User-Agent和Cookies 这个咱们以后再说。

第四个参数origin_req_host指的是请求方的HOST莫名称或者IP地址。

第五个unverifiable表示这个请求是否无法被验证,默认为False

第六个参数method表示请求方式, 如GET、POST、PUT等

好了,urllib库的第一节就先到这儿,不然篇幅太长了。

python3一爬虫库url_python3爬虫之Urllib库(一)相关推荐

  1. python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)

    urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. 一.urlopen函数: 在Python3的url ...

  2. 网络爬虫学习第一弹:urllib库使用

    小道之前有学过一点爬虫,但是面对越来越严峻的就业形势,为了提高自身竞争力,决定系统的学习一下爬虫.用的是崔庆才大大的书.写博作为自己的学习笔记,方便以后复习.欢迎高人补充赐教!小道感激不尽! 网络爬虫 ...

  3. python中的urllib库_七、urllib库(一)

    python2中,有urllib和urllib2两个库,在python3中统一为urllib库 它是python内置的HTTP请求库,包含了4个模块: request:最基本的HTTP请求模块,用来模 ...

  4. 第三部分 基本库的使用(urllib库, requests库, re库)

    Python提供了功能齐全的类库来完成网络请求.基础库的HTTP库有urllib, httplib2, requests, treq等. 比如说rullib库,不用关心底层怎么实现的,只要关心请求的链 ...

  5. python中的urllib库_python3里的Urllib库

    首先Urllib是python内置的HTTP请求库. 包括以下模块: urllib.request 请求模块: urllib.error 异常处理模块: urllib.parse url解析模块: u ...

  6. Python爬虫之(三)urllib库

    第一个爬虫程序 怎样扒网页呢? 其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS,如果把 ...

  7. Python爬虫之(四)urllib库的高级用法

    伪装自己 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作 设置请求头 其中User-Agent代表用的哪个请求的浏览器 from ur ...

  8. python urllib.request 爬虫 数据处理-python 爬虫之 urllib库

    文章更新于:2020-03-02 注:代码来自老师授课用样例. 一.初识 urllib 库 在 python2.x 版本,urllib 与urllib2 是两个库,在 python3.x 版本,二者合 ...

  9. python爬虫之urllib库详解

    python爬虫之urllib库详解 前言 一.urllib库是什么? 二.urllib库的使用 urllib.request模块 urllib.parse模块 利用try-except,进行超时处理 ...

最新文章

  1. pandas使用iloc函数将dataframe的所有数据行反序(reverse the order of rows in dataframe)
  2. linux中mysql如何删除库,Linux环境下MySQL基础命令(2)----查看、创建、删除库和表...
  3. 窗口分析函数_10_计算组总和的占比
  4. py2exe for python3_使用Py2Exe for Python3创建自己的exe程序
  5. 产品经理如何进行需求管理?
  6. TGE学习笔记07 - 脚本控制动画
  7. python redis 消息队列_Python的Flask框架应用调用Redis队列数据的方法
  8. 教你使用 IDEA 配置和运行vue项目
  9. 633.平方数之和(力扣leetcode) 博主可答疑该问题
  10. 用fft对信号进行频谱分析实验报告_频谱分析之Analyzer软件分析
  11. 微信小程序云开发源码(垃圾分类源码)
  12. 【Bandit Algorithms学习笔记】EXP3算法理论证明
  13. 斐讯k2搭建php环境,宿舍使用斐讯K2路由器详细设置步骤
  14. Unity制作九宫格手机手势解锁密码
  15. 数据组,请求组,职责,用户关系
  16. django图形验证码和邮件
  17. 32位与64位机器下各数据类型长度对比
  18. 原来 Element 的组件源码还能这么看
  19. [Unity] Unity获得Android的视频缩略图
  20. IDC FutureScape:2023年中国未来数字创新十大预测

热门文章

  1. Effective_STL 学习笔记(四十八) 总是 #incude 适当的头文件
  2. 【译】理解JavaScript闭包——新手指南
  3. 路飞学城-Python爬虫集训-第一章
  4. 钱币找零问题---贪心算法入门例题
  5. 阿里影业宣布新战略:“新基础设施”赋能电影产业
  6. webpack2 项目
  7. java project 连接hibernate 出错
  8. 新网站SEO要做的事情有哪些
  9. 并发编程3-线程调度
  10. 用C语言实现面向对象的开发