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的基本使用介绍的更多相关文章

  1. Python urllib和urllib2模块学习(二)

    一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...

  2. 爬虫框架urllib 之(三) --- urllib模块

    Mac本 需导入ssl import ssl ssl._create_default_https_context = ssl._create_unverified_context  urllib.re ...

  3. 第六节:web爬虫之urllib(二)

    二.urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, metho ...

  4. python网络编程(六)---web客户端访问

    1.获取web页面 urllib2 支持任何协议的工作---不仅仅是http,还包括FTP,Gopher. import urllib2 req=urllib2.Request('http://www ...

  5. Python 3基础教程31-urllib模块

    本文介绍Python里的urllib模块,这个urllib主要处理web服务的,如果需要做接口测试,或者写Python的网络爬虫,这个urllib就是最底层的库.需要用到里面的请求方法等. 1. 先看 ...

  6. Python采集VIP收费QQ音乐,一起来听周董最新的《说好不哭》,省3块不香吗?

    环境: windows python3.6.5 模块: requests selenium json re urllib 环境与模块介绍完毕后,就可以来实行我们的操作了. 第1步: 通过一个解析网站: ...

  7. 小白学 Python 爬虫(18):Requests 进阶操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. python爬虫之urllib库介绍

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

  9. python 爬虫 urllib模块介绍

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

随机推荐

  1. [Beta]the Agiles Scrum Meeting 1

    会议时间:2020.5.9 21:00 1.每个人的工作 今天已完成的工作 讨论转会事项 经过组内成员的讨论,我们做出了非常艰难的决定:我们的组员老c将作为转会成员,离开我们的团队.感谢老c在Alph ...

  2. redis5集群搭建步骤

    通常情况下为了redis的高可用,我们一般不会使用redis的单实例去运行,一般都会搭建一个 redis 的集群去运行.此处记录一下 redis5 以后 cluster 集群的搭建. 一.需求 red ...

  3. ESD

    Reverse standoff voltage是保护二极管的反向工作电压, 在这个电压, 二极管是不工作的. Breakdown voltage 是二极管的击穿电压, 超过这个电压后, 二极管迅速反 ...

  4. 高并发场景下JVM调优实践之路

    一.背景 2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验. 通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图: 可 ...

  5. Codeforces Round #738 (Div. 2) D2题解

    D2. Mocha and Diana (Hard Version) 至于D1,由于范围是1000,我们直接枚举所有的边,看看能不能加上去就行,复杂度是\(O(n^2logn)\).至于\(n\)到了 ...

  6. Gitee图床设置

    https://gitee.com/ 创建新仓库 点击右上角加号->新建仓库,填写基本信息后点击下面的创建即可 https://gitee.com/projects/new 创建新令牌 点击设置 ...

  7. shell 脚本二进制安装mysql

    以下脚本的手动安装连接:https://www.cnblogs.com/leihongnu/p/12581793.html [ #/bin/bash#脚本安装 mysql,上传安装包至 /rootcd ...

  8. MySQL 表的操作语句(2)

    一:MySQL支持的数据类型 1:CHAR和TEXT :分别表示定长的和可变长的串. CHAR:1-255个字符的定长串,它的长度必须在创建时指定. TEXT:最大长度为64K的文本 VARCHAR: ...

  9. sprint boot 手动快速创建web应用(2)

    1.打开Eclipse新建maven项目 2.导入maven依赖 <parent> <groupId>org.springframework.boot</groupId& ...

  10. js实现一个小游戏(飞翔的jj)

    js实现一个小游戏(飞翔的jj) 源代码+素材图片在我的仓库 <!DOCTYPE html> <html lang="en"> <head> & ...