# 自定义opener
 
from urllib.request import ProxyHandler,build_opener
from urllib.error import URLError
#设置代理
Proxy_Handler = ProxyHandler({
'http': 'http://127.o.o .1:9743',
'https': 'https://127.0 .0.1:9743'
})
opener = build_opener(Proxy_Handler)
try:
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
 
#获取cookie
import http.cookiejar,urllib.request
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
print(item.name +'='+item.value)
 
#处理异常
URLError
from urllib import request,error
#打开一个不存在的网页
try:
respense = request.urlopen( 'https://cuiqingcai.com/index.htm')
except error.URLError as e:
print(e.reason)
#reason :同父类一样,用于返回错误的原因
 
因为 URLError 是 HTTP Error 的父类,所以可以先选择捕获子类的错误,再去捕获父类的错误,所
以上述代码更好的写法如下:
from urllib import request, error
try:
response = request.urlopen(’ https://cuiqingcai.com/index.htm’)
except error.HTTPError as e:
print(e.reason, e.code, e.headers, sep=’\n’)
except error.URLError as e:
print(e . reason)
else:
print(’ Request Successfully')
这样就可以做到先捕获 HTTP Error ,获取它的错误状态码 、原因、 headers 等信息 。 如果不是
HTTP Error 异常,就会捕获 URLError 异常,输出错误原因 。 最后,用 else 来处理正常的逻辑 。 这是一
个较好的异常处理写法 。
有时候, reason 属性返回的不一定是字符串,也可能是一个对象 。 再看下面的实例:
import socket
import urllib.request
import urllib .error
try:
response = urllib.request.urlopen(’ https://WvM.baidu.com’, tim
except l」rllib . err口r.URLError as e:
print(type(e.reason))
if isinstance(e .reason, socket .tir陀out):
print(' TIME OUT')
这里我们直接设置超时时间来强制抛出 timeout 异常 。
运行结果如下:
<class ’ socket .timeout ’>
TIME OUT
可以发现, reason 属性的结果是 socket.timeout 类。 所以,这里我们可以用 is instance ()方法来
判断它的类型,作出更详细的异常判断。
#urlparse()该函数实现url识别与分段
from urllib.parse import urlparse
res = urlparse('https://i.cnblogs.com/EditPosts.aspx?postid=9531564')
print(type(res), res)
结果:
<class 'urllib.parse.ParseResult'> ParseResult(scheme='https', netloc='i.cnblogs.com', path='/EditPosts.aspx', params='', query='postid=9531564', fragment='')
 
from urllib import parse
params = {
'name':'123',
'age':22
}
url = 'http://www.baidu.com?'
n_url = url + parse.urlencode(params)
print(n_url)
结果http://www.baidu.com?name=123&age=22
这个方法非常常用 。 有时为了更加方便地构造参数,我们会事先用字典来表示 。 要转化为 URL
的参数时,只需要调用该方法即可 。
# quote()
该方法可以将内容转化为 URL 编码的格式 。 URL 中带有中文参数时,有时可能会导致乱码的问
题,此时用这个方法可以将巾文字符转化为 URL 编码,示例如下:
from urllib.parse import quote
keyword =’壁纸’
url =’ https://www.baidu.com/s?wd=’+ quote(keyword)
print(url)
这里我们声明了一个中文的搜索文字,然后用 quote ()方法对其进行 URL 编码,最后得到的结果
如下:
https://www.baidu.com/s?wd=%81%E7%BA%B8
#有了 quote ()方法,当然还有 unquote ()方法,它可以进行 URL 解码,示例如下:
from urllib.parse import unquote
url = 'http://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B'
print(unquote(url))

 

爬虫基础之urllib库(代码演示)的更多相关文章

  1. 爬虫基础(1):urllib库

    urllib库 urllib库是python中的一个基本网络请求库.用于模拟浏览器的行为,向指定服务器发送请求,并接收返回的数据. 在python3中所有的网络请求相关函数都集中在urllib.req ...

  2. 爬虫基础之urllib库

    urllib库的基本使用 urlopen() # 导入urllib库 import urllib # 往指定url发送请求,返回一个响应对象 response = urllib.request.url ...

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

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

  4. 第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求

    第三百二十七节,web爬虫讲解2—urllib库爬虫 利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码read()读出html源码内容decode(& ...

  5. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  6. 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

    第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解 封装模块 #!/usr/bin/env python # -*- coding: utf- ...

  7. 第三百二十九节,web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    第三百二十九节,web爬虫讲解2—urllib库爬虫—ip代理 使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置build_opener ...

  8. 第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理

    第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术.设置用户代理 如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执 ...

  9. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

随机推荐

  1. linux—epoll

    一.epoll服务端实现中需要的3个函数: epoll_create:创建保存epoll文件描述符的空间. epoll_ctl:向空间注册并注销文件描述符. epoll_wait:与select函数类 ...

  2. Python实现简单的四则运算

    GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预 ...

  3. linux 下mysql多实例安装

    1.软件下载 https://dev.mysql.com/downloads/file/?id=479096 免编译二进制包 mysql-5.6.21-linux-glibc2.5-x86_64.ta ...

  4. SQL通配符

    通配符可用于替代字符串中的任何其他字符. 在 SQL 中,通配符与 SQL LIKE 操作符一起使用. SQL 通配符用于搜索表中的数据. 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代 ...

  5. 软工作业PSP与单元测试训练

    任务说明(二选一): 一.实现模块判断传入的身份证号码的正确性: 二.实现模块判断传入的电子邮箱账号的正确性: 选择任务二: 实现要求: 一.实现功能模块: 1. 判断邮箱地址是否为空: 2. 判断邮 ...

  6. C#中d的??和?

    在C#中??和?分别是什么意思?   1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; 是正确的,int i=nu ...

  7. vue 路由(1)

    路由的使用  (5步) 1.首先安装路由  npm install  vue-router2.引入 vue-router import VueRouter from 'vue-router' 3.使用 ...

  8. Triangle Count

    Given an array of integers, how many three numbers can be found in the array, so that we can build a ...

  9. HTTP与HTTPS有哪些区别?

    大纲 这里写图片描述一.前言: 这里写图片描述这里写图片描述先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.1230 ...

  10. wifi编辑 centos

    ifconfig -a sudo iw dev 设置名称 scan