urllib的基本使用介绍
1. urllib中urlopen的基本使用介绍
1 ### urllib中urlopen的基本使用介绍
2
3 ## urlopen的基本用法(GET请求)
4 import urllib.request as r
5 # 访问一个url,返回一个对象
6 response = r.urlopen("https://www.python.org")
7 # 查看返回的网页页面内容
8 print(response.read().decode("utf-8"))
9 # 查看response类型
10 print(type(response))
11 # 查看response对象有什么方法和属性
12 print(dir(response))
13 # 获取response对象的相关用法帮助
14 help(response)
15 # 页面返回状态
16 print(response.status)
17 # 页面的headers元素内容
18 print(response.getheaders())
19 # 获取页面headers的Server属性值
20 print(response.getheader('Server'))
21
22
23 ## data参数(POST请求),urlencode可以把字典格式数据转化成字符串
24 import urllib.request as r
25 import urllib.parse as p
26 # 通过字符转换获取可直接post提交的数据data
27 data = bytes(p.urlencode({'word':'hello'}),encoding = 'utf-8')
28 data2 = p.urlencode({'word':'hello'})
29 print(data,data2)
30 # 通过post提交data数据
31 response2 = r.urlopen('http://httpbin.org/post',data=data)
32 response3 = r.urlopen('http://httpbin.org/post',data=bytes(data2,encoding = 'utf-8'))
33 print(response3.read())
34
35
36 # timeout参数
37 import urllib.request as r
38 import urllib.error as er
39 import socket
40
41 # 尝试执行
42 try:
43 response4 = r.urlopen('http://httpbin.org/get',timeout=0.1)
44 print(response4.read())
45 # 出现错误进行抓取而不中断程序
46 except er.URLError as e:
47 # 错误原因
48 print(e.reason)
49 print(socket.timeout)
50 # 判断类型是否相同
51 if isinstance(e.reason, socket.timeout):
52 print(isinstance(e.reason, socket.timeout))
53 print('TIME OUT')
54
55
56 # 其他参数:cafile指定CA证书,capath指定CA证书路径,context参数,必须是ssl.SSLContext类型,用来指定SSL设置
2. urllib中Request的基本使用介绍
1 ### urllib中Request的基本使用介绍
2
3
4 ## Request对象进行传参爬取页面
5 import urllib.request
6
7 # 生成一个request对象
8 request = urllib.request.Request('https://python.org')
9 # 将request对象进行传参
10 response = urllib.request.urlopen(request)
11 print(type(request))
12 print(response.read().decode('utf-8'))
13
14
15 ## Request对象的参数:
16 ## url,用于请求URL,必传参数
17 ## data,必须传bytes类型的数据
18 ## headers,请求头,是一个字典,也可以通过请求实例的add_header()方法进行添加
19 ## origin_req_host指的是请求方的host名称或者IP地址
20 ## unverifiable布尔类型,表示这个请求是无法验证的,默认是False
21 ## method是一个字符串,指定请求方法,如get,post
22 from urllib import request, parse
23
24 url = 'http://httpbin.org/post'
25 headers = {
26 'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
27 'Host':'httpbin.org',
28 }
29 dict = {
30 'name':'dmr'
31 }
32 # 转换数据类型为bytes
33 data = bytes(parse.urlencode(dict), encoding='utf-8')
34 # 生成Request请求对象
35 req = request.Request(url=url,data=data,headers=headers)
36 response = request.urlopen(req)
37 print(response.read().decode('utf-8'))
38
39
40 ### 高级用法
41
42 ## web弹窗认证
43 from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
44 from urllib.error import URLError
45
46 username = 'username'
47 password = 'password'
48 url = 'http://127.0.0.1:6666'
49 # 生成HTTPPasswordMgrWithDefaultRealm对象
50 p = HTTPPasswordMgrWithDefaultRealm()
51 # 为对象添加认证参数信息
52 p.add_password(None,url=url,username=username,password=password)
53 # 生成认证对象
54 auth_handler = HTTPBasicAuthHandler(p)
55 # 生成opener对象
56 opener = build_opener(auth_handler)
57
58 try:
59 result = opener.open(url)
60 html = result.read().decode('utf-8')
61 print(html)
62 except URLError as e:
63 print(e.reason)
64
65
66 ## 代理
67 from urllib.error import URLError
68 from urllib.request import ProxyHandler, build_opener
69
70 proxy = {
71 'http':'http://127.0.0.1:4564',
72 'https':'http://127.0.0.1:4564'
73 }
74 proxy_handler = ProxyHandler(proxy)
75 opener = build_opener(proxy_handler)
76 try:
77 result = opener.open('https://www.baidu.com')
78 print(result.read().decode('utf-8'))
79 except URLError as e:
80 print(e.reason)
81
82
83 ## Cookies,提取网页的Cookies;可通过http.cookiejar.Mozilla(LWP)CookieJar(filename)和.save()将cookies保存到文件
84 import http.cookiejar, urllib.request
85
86 cookie = http.cookiejar.CookieJar()
87 handler = urllib.request.HTTPCookieProcessor(cookie)
88 opener = urllib.request.build_opener(handler)
89 response = opener.open('http://www.baidu.com')
90 for item in cookie:
91 print(item.name+'='+item.value)
3. 处理异常
1 ### 处理异常
2
3 ## URLError
4 from urllib import request, error
5
6 try:
7 response = request.urlopen('http:www.dmr666.org')
8 except error.URLError as e:
9 print(e.reason)
10
11
12 ## HTTPError, URLError的子类
13 from urllib import request, error
14
15 try:
16 response = request.urlopen('http://www.dmr66.org')
17 except error.HTTPError as e:
18 print(e.reason, e.code, e.headers, seq='\n')
19 else:
20 pass
4. 解析链接&robots
1 ### 解析链接
2
3 ## urlparse()
4 ## scheme协议,://前面部分
5 ## netloc域名,第一个/符号前面
6 ## path路径,域名后面;前面部分
7 ## params参数,;号后面问号?前面
8 ## query查询条件,?号后面,用于get类型的url
9 ## flagment描点,#后面,用于定位页面内部的下拉位置
10 from urllib.parse import urlparse
11
12 result = urlparse('http://www.baidu.com/index.html;user?id=$#comment')
13 print(type(result), result)
14
15
16 ## urlunparse(),传入可迭代对象,长度必须是6
17 from urllib.parse import urlunparse
18
19 data = ['http','www.baidu.com','index.html','user','b=6','comment']
20 print(urlunparse(data))
21
22
23 ## urlsplit(),params会合并在path中
24 from urllib.parse import urlsplit
25
26 result = urlsplit('http://www.baidu.com/index.html;user?id=$#comment')
27 print(result)
28
29 ## urlunsplit(),传入可迭代对象,长度必须是5
30 from urllib.parse import urlunsplit
31
32 data = ['http','www.baidu.com','index.html','a=6','comment']
33 print(data)
34
35
36 ## urljoin(),url拼接,只保留scheme,netloc,path
37 ## scheme,netloc,path三部分内容新链接中不存在,则补充,新链接中存在,则用新链接的
38 from urllib.parse import urljoin
39
40 print(urljoin('http://www.baidu.com','index.html'))
41 print(urljoin('http://www.baidu.com','https://www.baidu.com/index.html'))
42 print(urljoin('http://www.baidu.com/dmr.html','https://www.baidu.com/index.html'))
43 print(urljoin('http://www.baidu.com/dmr.html','https://www.baidu.com/index.html?q=2'))
44 print(urljoin('http://www.baidu.com/dmr.html','q=2#comment'))
45 print(urljoin('www.baidu.com/dmr.html','q=2#comment'))
46 print(urljoin('www.baidu.com#coment','q=2'))
47
48
49 ## urlencode(),字典序列化,把字典序列化成get请求参数,常用于get请求url的拼接
50 from urllib.parse import urlencode
51
52 query = {
53 'name':'dmr',
54 'age':'25',
55 }
56 base_url = 'http://www.badu.com'
57 q = urlencode(query)
58 url = base_url + q
59 print(url)
60
61
62 ## parse_qs(),反序列化,将参数转换成字典格式
63 from urllib.parse import parse_qs
64
65 query='name=dmr&age=25'
66 dict = parse_qs(query)
67 print(type(dict),dict)
68
69
70 ## parse_qsl(),反序列化,将参数转换成元组组成的列表
71 from urllib.parse import parse_qsl
72
73 query = 'name=dmr&age=25'
74 list = parse_qsl(query)
75 print(list)
76
77
78 ## quote(),将内容转换成url编码格式,url中有中文内容时,常出现乱码
79 from urllib.parse import quote
80
81 keyword = '杜某人'
82 url = 'https://www.baidu.com/?wd=' + keyword
83 print(url)
84 print(quote(url))
85
86 ## unquote(),解码
87 from urllib.parse import unquote
88
89 url = 'https%3A//www.baidu.com/%3Fwd%3D%E6%9D%9C%E6%9F%90%E4%BA%BA'
90 print(unquote(url))
91
92
93
94 ### Robots协议,即爬虫协议,用来告诉爬虫哪些页面可以爬取,哪些页面不可以爬取
95 # 当搜索爬虫访问一个站点时,它先检查这个站点根目录下是否存在robots文件,如果存在,则按照其中定义的范围来爬取,否则,皆可爬取
96 # 其中,robots文件基本包含如下3项内容
97 # User-agent:* # 爬虫名称,*为所有
98 # Disallow:/ # 禁止爬取的网站目录
99 # Allow:/public/ # 仅允许爬取的网站目录,一般不与Disallow共用
100 ## robotparser(),解析robots文件模块
101 ## set_url(),用来设置设置robots.txt文件链接
102 ## read(),读取robots.txt文件并进行分析
103 ## parse(),用来解析robots.txt文件
104 ## can_fetch(User-agent,URL),判断url页面是否可以爬取
105 ## mtime(),返回上次抓取和分析robots.txt的时间
106 ## modified(),将当前时间设置为上次抓取和分析robots.txt的时间
107
108 from urllib.robotparser import RobotFileParser
109
110 rp = RobotFileParser()
111 rp.set_url('http://www.baidu.com/robots.txt')
112 rp.read()
113 print(rp.can_fetch('*','http://www.baidu.com/p/ldkfjlk'))
114 print(rp.can_fetch('*','http://www.baidu.com/s?wd=Python'))
urllib的基本使用介绍的更多相关文章
- Python urllib和urllib2模块学习(二)
一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...
- 爬虫框架urllib 之(三) --- urllib模块
Mac本 需导入ssl import ssl ssl._create_default_https_context = ssl._create_unverified_context urllib.re ...
- 第六节:web爬虫之urllib(二)
二.urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, metho ...
- python网络编程(六)---web客户端访问
1.获取web页面 urllib2 支持任何协议的工作---不仅仅是http,还包括FTP,Gopher. import urllib2 req=urllib2.Request('http://www ...
- Python 3基础教程31-urllib模块
本文介绍Python里的urllib模块,这个urllib主要处理web服务的,如果需要做接口测试,或者写Python的网络爬虫,这个urllib就是最底层的库.需要用到里面的请求方法等. 1. 先看 ...
- Python采集VIP收费QQ音乐,一起来听周董最新的《说好不哭》,省3块不香吗?
环境: windows python3.6.5 模块: requests selenium json re urllib 环境与模块介绍完毕后,就可以来实行我们的操作了. 第1步: 通过一个解析网站: ...
- 小白学 Python 爬虫(18):Requests 进阶操作
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- python爬虫之urllib库介绍
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- python 爬虫 urllib模块介绍
一.urllib库 概念:urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urll ...
随机推荐
- alertmanager的使用
alertmanager的使用 一.Alertanager的安装 1.下载 2.安装 3.启动 4.alertmanager和prometheus的整合 二.告警分组 1.告警规则 2.alertma ...
- netty传输java bean对象
在上一篇博客(netty入门实现简单的echo程序)中,我们知道了如何使用netty发送一个简单的消息,但是这远远是不够的.在这篇博客中,我们来使用netty发送一个java bean对象的消息,但是 ...
- MyBatis源码分析(一):从JDBC到MyBatis 介绍MyBatis的背景,为什么要用MyBatis
一.介绍JDBC JDBC全称Java Database Connectivity,是Java语言规范客户端访问数据库的应用程序接口,所面向的数据库类型为关系型数据库. JDBC的三层架构图: JDB ...
- 从零开始 DIY 智能家居 - 基于 ESP32 的智能紫外线传感器模块
目录 前言 硬件选择 二.使用步骤 获取代码 设备控制命令: 设备和协议初始化流程: 配置设备信息 回调函数注册 数据获取与上报流程 总结 前言 做了这么多传感器都是自己玩,这次家里人看不下去了,非得 ...
- Python正则表达式使用小记
最近做Python课实验发现正则表达式和它在py中的的标准库re有很多能多琢磨一下的点,遂决定写成一篇小记,以后想复习能再来看看. 名词 因为不同文献书籍对正则表达式的描述有差别,我在这里列出一下我已 ...
- Java日期API
JDK8之前日期时间API java.util.Date类 表示特定的瞬间,精确到毫秒 构造器: Date():使用无参构造器创建的对象可以获取本地当前时间. Date(long date) 常用方法 ...
- MnogoDB唯一索引,稀疏索引
1,单个字段唯一索引 db.collection.createIndex({name:1},{unique:true} 2,多个字段联合索引示例 db.collection.createIndex({ ...
- 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
"指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...
- Java 初始化与清理
用构造器确保初始化 如何自定义构造器(constructor)? 构造器方法的名称与类名相同,并且没有返回值. 需要注意,在定义构方法时,方法名前面不要添加任何的类型说明符,格式:类名(){},构造方 ...
- pytest-mian函数运行
1.设置多并发运行 1.命令行安装 pip install pytest-xdist #安装插件,进行多并发运行,#调用:-n -5 import pytest # pytest.main([&quo ...