介绍urllib库在不同版本的Python中的变动,并以Python3.X讲解urllib库的相关用法。

urllib库对照速查表

Python2.X

Python3.X

urllib

urllib.request, urllib.error, urllib.parse

urllib2

urllib.request, urllib.error

urllib2.urlopen

urllib.request.urlopen

urllib.urlencode

urllib.parse.urlencode

urllib.quote

urllib.request.quote

urllib2.Request

urllib.request.Request

urlparse

urllib.parse

urllib.urlretrieve

urllib.request.urlretrieve

urllib2.URLError

urllib.error.URLError

cookielib.CookieJar

http.CookieJar

urllib库是用于操作URL,爬取页面的python第三方库,同样的库还有requests、httplib2。

在Python2.X中,分urllib和urllib2,但在Python3.X中,都统一合并到urllib中。通过上表可以看到其中常见的变动,依据该变动可快速写出相应版本的python程序。

相对来说,Python3.X对中文的支持比Python2.X友好,所以该博客接下来通过Python3.X来介绍urllib库的一些常见用法。

发送请求

import urllib.request

r = urllib.request.urlopen("http://www.python.org/")

首先导入urllib.request模块,使用urlopen()对参数中的URL发送请求,返回一个http.client.HTTPResponse对象。

在urlopen()中,使用timeout字段,可设定相应的秒数时间之后停止等待响应。除此之外,还可使用r.info()、r.getcode()、r.geturl()获取相应的当前环境信息、状态码、当前网页URL。

读取响应内容

import urllib.request

url = "http://www.python.org/"

with urllib.request.urlopen(url) as r:

r.read()

使用r.read()读取响应内容到内存,该内容为网页的源代码(可用相应的浏览器“查看网页源代码”功能看到),并可对返回的字符串进行相应解码decode()。

传递URL参数

import urllib.request

import urllib.parse

params = urllib.parse.urlencode({'q': 'urllib', 'check_keywords': 'yes', 'area': 'default'})

url = "https://docs.python.org/3/search.html?{}".format(params)

r = urllib.request.urlopen(url)

以字符串字典的形式,通过urlencode()编码,为URL的查询字符串传递数据,

编码后的params为字符串,字典每项键值对以’&’连接:’q=urllib&check_keywords=yes&area=default’

构建后的URL:https://docs.python.org/3/search.html?q=urllib&check_keywords=yes&area=default

当然,urlopen()支持直接构建的URL,简单的get请求可以不通过urlencode()编码,手动构建后直接请求。上述方法使代码模块化,更优雅。

传递中文参数

import urllib.request

searchword = urllib.request.quote(input("请输入要查询的关键字:"))

url = "https://cn.bing.com/images/async?q={}&first=0&mmasync=1".format(searchword)

r = urllib.request.urlopen(url)

该URL是利用bing图片接口,查询关键字q的图片。如果直接将中文传入URL中请求,会导致编码错误。我们需要使用quote(),对该中文关键字进行URL编码,相应的可以使用unquote()进行解码。

定制请求头

import urllib.request

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

headers = {

'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',

'Referer': 'https://docs.python.org/3/library/urllib.html'

}

req = urllib.request.Request(url, headers=headers)

r = urllib.request.urlopen(req)

有时爬取一些网页时,会出现403错误(Forbidden),即禁止访问。这是因为网站服务器对访问者的Headers属性进行身份验证,例如:通过urllib库发送的请求,默认以”Python-urllib/X.Y”作为User-Agent,其中X为Python的主版本号,Y为副版本号。所以,我们需要通过urllib.request.Request()构建Request对象,传入字典形式的Headers属性,模拟浏览器。

相应的Headers信息,可通过浏览器的开发者调试工具,”检查“功能的”Network“标签查看相应的网页得到,或使用抓包分析软件Fiddler、Wireshark。

除上述方法外,还可以使用urllib.request.build_opener()或req.add_header()定制请求头,详见官方样例。

在Python2.X中,urllib模块和urllib2模块通常一起使用,因为urllib.urlencode()可以对URL参数进行编码,而urllib2.Request()可以构建Request对象,定制请求头,然后统一使用urllib2.urlopen()发送请求。

传递POST请求

import urllib.request

import urllib.parse

url = 'https://passport.cnblogs.com/user/signin?'

post = {

'username': 'xxx',

'password': 'xxxx'

}

postdata = urllib.parse.urlencode(post).encode('utf-8')

req = urllib.request.Request(url, postdata)

r = urllib.request.urlopen(req)

我们在进行注册、登录等操作时,会通过POST表单传递信息。

这时,我们需要分析页面结构,构建表单数据post,使用urlencode()进行编码处理,返回字符串,再指定’utf-8’的编码格式,这是因为POSTdata只能是bytes或者file object。最后通过Request()对象传递postdata,使用urlopen()发送请求。

下载远程数据到本地

import urllib.request

url = "https://www.python.org/static/img/python-logo.png"

urllib.request.urlretrieve(url, "python-logo.png")

爬取图片、视频等远程数据时,可使用urlretrieve()下载到本地。

第一个参数为要下载的url,第二个参数为下载后的存放路径。

该样例下载python官网logo到当前目录下,返回元组(filename, headers)。

设置代理IP

import urllib.request

url = "https://www.cnblogs.com/"

proxy_ip = "180.106.16.132:8118"

proxy = urllib.request.ProxyHandler({'http': proxy_ip})

opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)

urllib.request.install_opener(opener)

r = urllib.request.urlopen(url)

有时频繁的爬取一个网页,会被网站服务器屏蔽IP。这时,可通过上述方法设置代理IP。

首先,通过网上代理IP的网站找一个可以用的IP,构建ProxyHandler()对象,将’http’和代理IP以字典形式作为参数传入,设置代理服务器信息。再构建opener对象,将proxy和HTTPHandler类传入。通过installl_opener()将opener设置成全局,当用urlopen()发送请求时,会使用之前设置的信息来发送相应的请求。

异常处理

import urllib.request

import urllib.error

url = "http://www.balabalabala.org"

try:

r = urllib.request.urlopen(url)

except urllib.error.URLError as e:

if hasattr(e, 'code'):

print(e.code)

if hasattr(e, 'reason'):

print(e.reason)

可以使用URLError类,处理一些URL相关异常。导入urllib.error,捕获URLError异常后,因为只有发生HTTPError异常(URLError子类)时,才会有异常状态码e.code,所以需要判断异常是否有属性code。

Cookie的使用

import urllib.request

import http.cookiejar

url = "http://www.balabalabala.org/"

cjar = http.cookiejar.CookieJar()

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))

urllib.request.install_opener(opener)

r = urllib.request.urlopen(url)

通过无状态协议HTTP访问网页时,Cookie维持会话间的状态。例如:有些网站需要登录操作,第一次可通过提交POST表单来登录,当爬取该网站下的其它站点时,可以使用Cookie来保持登录状态,而不用每次都通过提交表单来登录。

首先,构建CookieJar()对象cjar,再使用HTTPCookieProcessor()处理器,处理cjar,并通过build_opener()构建opener对象,设置成全局,通过urlopen()发送请求。

官方文档

Python2.X和Python3.X中的urllib区别

Urllib是Python提供的一个用于操作URL的模块,在Python2.X中,有Urllib库,也有Urllib2库,在Python3.X中Urllib2合并到了Urllib中,我们爬取网页的时候 ...

python3爬虫之Urllib库(一)

上一篇我简单说了说爬虫的原理,这一篇我们来讲讲python自带的请求库:urllib 在python2里边,用urllib库和urllib2库来实现请求的发送,但是在python3种在也不用那么麻烦了 ...

python爬虫---从零开始(二)Urllib库

接上文再继续我们的爬虫,这次我们来述说Urllib库 1,什么是Urllib库 Urllib库是python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常 ...

详解:Python2中的urllib、urllib2与Python3中的urllib以及第三方模块requests

在python2中,urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的不同如下: 1.urllib2可以接受一个Request类的实例来设置URL请求的hea ...

Python3中Urllib库基本使用

什么是Urllib? Python内置的HTTP请求库 urllib.request          请求模块 urllib.error              异常处理模块 urllib.par ...

爬虫中urllib库

一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

python学习笔记——urllib库中的parse

1 urllib.parse urllib 库中包含有如下内容 Package contents error parse request response robotparser 其中urllib.p ...

python学习笔记——爬虫学习中的重要库urllib

1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...

第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

随机推荐

binarySearch二分查找——Javascript实现

在很早之前,我就写过了一篇也关于二分法的相关博文:JavaScript快排与原生sort的测试.当时是用二分法进行快速排序,其实和这次思路大致相当.二分查找最重要的一个条件,就是需要将数组先按照从小到 ...

SharePoint Dialog 使用

SharePoint中弹出模态窗口对体验提高太大了 方法为: 父页面中调用子页面: function showDialog() {        var options = {             ...

Spring的IOC注解学习

先引入jar包,common-annotations.jar 接着上代码: 1.dao接口 package com.dao; public interface OkpDao { public void ...

[db]mysql全量迁移db

机房要裁撤, 原有的老业务机的mysql需要迁移到新的. 方案1: 全量打包拷贝data目录, 发现拷过去各种毛病 方案2: mysqldump逻辑导出解决问题 新的db刚安装好. 步骤记录下. # ...

Python学习笔记第二十一周

目录: 1.URL 2.Models - 操作 3.Templates - html模板的使用 - 自定义函数 4.cookie和session 5.分页(自定义分页) 6.Form验证 内容: 1. ...

EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手

----------------------------目录------------------------------ EntityFramework 5.0 CodeFirst 教程03-数据结构 ...

《梦断代码》读书笔记 part3

第六章:搞掂设计方案 备份很重要. 必须从小项目开始,而且永远不要期望它变大,如果你这么想,就会做过度设计,把它想象得过于重要,更坏的情况是,你可能会被自己想象中的艰难工作所吓到.所以要从小 处起步, ...

使用meta属性禁用手机浏览器的缩放功能

在移动设备浏览器上,通过为视口(viewport)设置 meta 属性为 user-scalable=no 可以禁用其缩放(zooming)功能.这样禁用缩放功能后,用户只能滚动屏幕,就能让你的网站看 ...

treeMap,key排序,value排序

HashMap与TreeMap按照key和value排序 使用一个场景是mapreduce中用解决topn问题是用value 排序 topn MapReducetopN

Python之PyFrameObject动态执行环境

Python虚拟机中的执行环境 Python的虚拟机实际上是在模拟操作系统运行可执行文件的过程,首先,我们先来讲一下普通的x86的机器上,可执行文件是以一种什么方式运行的. 图1-1 图1-1所展示的 ...

python中的urllib库_Python2/3中的urllib库相关推荐

  1. Python中的urllib.quote和Go中的url.QueryEscape关系探讨

    工作中多次遇到Python版本的签名算法,需要用Go版本再实现一遍,这就需要牵扯到Python 2.7中的urllib中的quote,quote_plus和Go中net/url包中的url.Query ...

  2. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  3. python中读写excel的扩展库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

  4. python中求和公式是什么函数_Python的math库中,用于求和的函数是( )。

    [单选题]确定兴利库容 V 兴 ,已知某水库为一回运用水库,其一次蓄水量为 V 1 =300 万 m 3 ,一次供水量为 V 2 =150 万 m 3 . [ ]. [单选题]hAB大于0说明B点的高 ...

  5. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. 如何用python和pip安装在txt文件中配置好版本的库包

    如何用python和pip安装在txt文件中配置好版本的库包 文章目录: 一.建立库包版本的txt配置文件 二.安装txt配置文件中的库包 有时候你自己用python实现一个项目,然后想把它在gith ...

  7. Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式、清除原有图像、设置横坐标显示文字/旋转角度、添加图例、绘图布局自动调整、图像显示、图像暂停)

    Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式.清除原有图像.设置横坐标显示文字/旋转角度.添加图例.绘图布局自动调整.图像显示.图像暂停) 目 ...

  8. python requests超时时间_python - requests 库 使用过程中timeout值最大可设值?

    问 题 请问 requests 库 使用过程中timeout错误的默认时间是多长呢? 查看源码 理论上 timeout值可以任意设? 默认 timeout 值 是怎么来的呢? 如果我想设一个比较大的t ...

  9. python安装成功第三方库但import出问题_解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程...

    一.问题具体描述: 在cmd控制台 pip install xxxx 后并显示安装成功后,并且尝试用cmd 的python 中import xxxx ,没有显示异常,说明这个库是安装成功了的.(这里以 ...

最新文章

  1. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...
  2. 马斯克成功把人从太空送回地球!历时64天,SpaceX首次载人任务圆满收工
  3. 3.10以上charles版本抓取Https数据包
  4. 9本java程序员必读的书(附下载地址)
  5. koa cookie使用
  6. AIX系统Memory性能评估
  7. 【物联网】OpenWrt编译出现Unable to find remote helper for 'https'问题
  8. 从右边开始放_幸福的生活,从入住新房开始,效果很漂亮,忍不住给大家晒晒全屋...
  9. 传西门子中国运营中近一半业务涉及行贿
  10. 廊坊职业技术学院计算机专业宿舍,2020廊坊职业技术学院宿舍条件如何-有空调否?(宿舍图片)...
  11. linux qt调用摄像头,Qt5下实现摄像头预览及捕获图像方法实例
  12. 三分钟将PR电影级调色滤镜应用到Unity中__Unity_PPS使用笔记
  13. 分布式任务调度组件 Uncode-Schedule
  14. 即时通讯软件:(c++实现)
  15. 电脑中文件名称字体变颜色怎么解决,由黑色变成蓝色了。。。。。。
  16. C语言 sigaction函数捕捉信号 注册回调函数
  17. 正则表达式收藏(三)之高级技巧
  18. 概念解释--工具链是什么?
  19. 用arduino从零开始做一个《儿童算术智能出题机》——NO.1硬件篇(MAX7219、矩阵键盘、GD3800D、3D打印)
  20. ElementUi轮播图走马灯添加图片

热门文章

  1. Struts2教程3:struts.xml常用配置解析
  2. Google Perf Tools安装以及使用
  3. Java原生代码连接MySQL数据库
  4. php监控url,php对URL地址探测
  5. 红外传感器的基础知识
  6. C#通过Socket在网络间发送和接收图片的演示源码
  7. 记一次失败的RecycleView滑动定位
  8. Google+ 团队的 Android UI 测试
  9. 力拼5G,台湾拟释放出更多频谱
  10. 欲走考研,难辞青衫,小园香径独徘徊。