请求库 urllib

urllib主要分为几个部分

urllib.request 发送请求
urllib.error 处理请求过程中出现的异常
urllib.parse 处理url
urllib.robotparser 解析robots.txt -->规定了该网站的爬虫权限

urllib.request方法

data = urllib.request.urlopen(url)  #返回response对象

data.read() --->取出网页源代码 (bytes类型,可以通过decode()转成utf-8) 注意网页源代码不包括js处理后的数据
data.info() --->取出响应的头信息
data.getcode() --->取出返回码
data.geturl() --->取出请求的url

用脚本发出的请求,headers中的User-Agent是python-urllib/3.6,有些网站会根据这个来识别请求是不是脚本发出的,进而过滤掉爬虫,那我们怎么来模拟浏览器访问呢?
用urllib.request.Request()来携带headers头信息

headers = {
'User=Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
}
request = urllib.request.Request(url,headers=headers) #实例Request()对象,Request对象初始化可以传入headers
data = urllib.request.urlopen(request) #urlopen不仅可以传入一个url,并且可以传入一个Request对象

urllib.request是如何区分请求时get还是post呢?
看看urllib.request的源代码,可以知道,如果如果请求携带data参数,则为post请求,反之则为get请求

Cookies使用

固定写法

import http.cookiejar
# 创建cookieJar对象
cookie_jar = http.cookiejar.CookieJar()
# 使用HTTPCookieProcessor创建cookie处理器,并以它为参数构建opener对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie_jar))
# 把opener变成urlopen,安装之后,给urlopen加上了保存cookies功能
urllib.request.install_opener(opener) #如果不想安装也可以,直接用opener.open(url)打开

设置代理

固定写法

proxy = {'http':'183.232.188.18:80','https':'183.232.188.18:80'} # 代理 ip:port
# 创建代理处理器
proxies = urllib.request.ProxyHandler(proxy)
# 创建opener对象
opener = urllib.request.build_opener(proxies,urllib.request.HTTPHandler)
urllib.request.install_opener(opener) # 如果不想安装也可以,直接用opener.open(url)打开,这样opener就有代理而urlopen没有

urllib.error

URLError是父类 断网或者服务器不存在 有异常原因,没有code属性
HTTPError是子类 服务器存在,但是地址不存在,有code和reason属性

#url = 'http://www.adfdsfdsdsa.com' URLError
#url = 'https://jianshu.com/p/jkhsdhgjkasdhgjkadfhg' HTTPError

判断方法

try:
data = urllib.request.urlopen(url)
print(data.read().decode())
except urllib.error.URLError as e:
if hasattr(e,'code'):
print('HTTPError')
elif hasattr(e,'reason'):
print('URLError')

urllib.parse

import urllib.parse

# urllib.parse.urljoin() # 拼接url 字符串拼接,若都是域名,则以后面覆盖
# urllib.parse.urlencode() # 把字典转查询字符串
# urllib.parse.quote() # url采用ascii码编码,出现中文时需要进行url编码
# urllib.parse.unquote() # url解码
#
urlencode >>> from urllib import parse
>>> query = {
'name': 'walker',
'age': 99,
}
>>> parse.urlencode(query)
'name=walker&age=99' quote/quote_plus >>> from urllib import parse
>>> parse.quote('a&b/c') #未编码斜线
'a%26b/c'
>>> parse.quote_plus('a&b/c') #编码了斜线
'a%26b%2Fc' unquote/unquote_plus from urllib import parse
>>> parse.unquote('1+2') #不解码加号
'1+2'
>>> parse.unquote('1+2') #把加号解码为空格
'1 2' url = 'http://www.baidu.com/?wd=书包'
urllib.request.urlopen(url) #会报错编码错误
#如果想正确请求,需要url = 'http://www.baidu.com/?wd={}'.format(urllib.parse.quote('书包')) 先把中文进行url编码,然后再去请求

urllib3

requests库底层用的urllib3

 import urllib3
http = urllib3.PoolManager() r = http.request('GET','https://www.jianshu.com',redirect=False) # 关闭重定向
print(r.status)

具体的urllib3的使用可以参考https://www.cnblogs.com/KGoing/p/6146999.html

python爬虫之urllib库的更多相关文章

  1. python爬虫之urllib库(三)

    python爬虫之urllib库(三) urllib库 访问网页都是通过HTTP协议进行的,而HTTP协议是一种无状态的协议,即记不住来者何人.举个栗子,天猫上买东西,需要先登录天猫账号进入主页,再去 ...

  2. python爬虫之urllib库(二)

    python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...

  3. python爬虫之urllib库(一)

    python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...

  4. python爬虫之urllib库介绍

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

  5. python 爬虫之 urllib库

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

  6. Python 爬虫之urllib库的使用

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

  7. python爬虫入门urllib库的使用

    urllib库的使用,非常简单. import urllib2 response = urllib2.urlopen("http://www.baidu.com") print r ...

  8. Python爬虫系列-Urllib库详解

    Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...

  9. python爬虫03 Urllib库

    Urllib   这可是 python 内置的库 在 Python 这个内置的 Urllib 库中 有这么 4 个模块 request request模块是我们用的比较多的 就是用它来发起请求 所以我 ...

随机推荐

  1. 使用nginx cache缓存网站数据实践

    Nginx本身就有缓存功能,能够缓存静态对象,比如图片.CSS.JS等内容直接缓存到本地,下次访问相同对象时,直接从缓存即可,无需访问后端静态服务器以及存储存储服务器,可以替代squid功能. 1   ...

  2. 守护进程监控tomcat并自己主动重新启动

    昨天的tomcat问题.一天挂了3,4回,受不了了决定写个监控tomcat进程并自己主动重新启动的脚本! 在网上查资料.主要分为两类:一类是定时重新启动tomcat,这当然不是我须要的.还有一类是监控 ...

  3. 转:: 刺鸟:用python来开发webgame服务端(3)

    来源:http://ciniao.me/article.php?id=11 --------------- 刺鸟原创文章,转载请注明出处    在之前的准备工作中,我们已经建立了一个socket服务器 ...

  4. jqgrid动态添加rowlist

    function changePager(){     var pagerCenter =$('#grid-pager_center');//获取td     pagerCenter.find('se ...

  5. MVC架构模式概述

    MVC MVC概述: Model–view–controller (MVC) is a software architectural pattern for implementing user int ...

  6. Young Maids

    E - Young Maids Time limit : 2sec / Memory limit : 256MB Score : 800 points Problem Statement Let N  ...

  7. 微信小程序开发遇见的问题之一

    在开发的时候,因为要定位到当前的城市,而小程序提供的API只是能够获取当前的经纬度,所以我们需要通过接入百度地图的API.调接口的时候发现报错,说域名不合法,此时千万不要着急,只要你登录你的微信开发公 ...

  8. make tree install 目录树状结构工具安装

    http://futeng.iteye.com/blog/2071867 http://zhou123.blog.51cto.com/4355617/1196415 wget ftp://mama.i ...

  9. dev 转自

    .隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; .得到当前选定记录某字段的值 sValue=Table.Rows[gridV ...

  10. ng-disabled的使用

    1.适用范围 该指令适用于<input>, <select>,<button> 和 <textarea> 元素. 2.用法解析 ng-disabled ...