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 ...
随机推荐
- [Beta]the Agiles Scrum Meeting 1
会议时间:2020.5.9 21:00 1.每个人的工作 今天已完成的工作 讨论转会事项 经过组内成员的讨论,我们做出了非常艰难的决定:我们的组员老c将作为转会成员,离开我们的团队.感谢老c在Alph ...
- redis5集群搭建步骤
通常情况下为了redis的高可用,我们一般不会使用redis的单实例去运行,一般都会搭建一个 redis 的集群去运行.此处记录一下 redis5 以后 cluster 集群的搭建. 一.需求 red ...
- ESD
Reverse standoff voltage是保护二极管的反向工作电压, 在这个电压, 二极管是不工作的. Breakdown voltage 是二极管的击穿电压, 超过这个电压后, 二极管迅速反 ...
- 高并发场景下JVM调优实践之路
一.背景 2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验. 通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图: 可 ...
- Codeforces Round #738 (Div. 2) D2题解
D2. Mocha and Diana (Hard Version) 至于D1,由于范围是1000,我们直接枚举所有的边,看看能不能加上去就行,复杂度是\(O(n^2logn)\).至于\(n\)到了 ...
- Gitee图床设置
https://gitee.com/ 创建新仓库 点击右上角加号->新建仓库,填写基本信息后点击下面的创建即可 https://gitee.com/projects/new 创建新令牌 点击设置 ...
- shell 脚本二进制安装mysql
以下脚本的手动安装连接:https://www.cnblogs.com/leihongnu/p/12581793.html [ #/bin/bash#脚本安装 mysql,上传安装包至 /rootcd ...
- MySQL 表的操作语句(2)
一:MySQL支持的数据类型 1:CHAR和TEXT :分别表示定长的和可变长的串. CHAR:1-255个字符的定长串,它的长度必须在创建时指定. TEXT:最大长度为64K的文本 VARCHAR: ...
- sprint boot 手动快速创建web应用(2)
1.打开Eclipse新建maven项目 2.导入maven依赖 <parent> <groupId>org.springframework.boot</groupId& ...
- js实现一个小游戏(飞翔的jj)
js实现一个小游戏(飞翔的jj) 源代码+素材图片在我的仓库 <!DOCTYPE html> <html lang="en"> <head> & ...