Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)


Posted in Python onSeptember 21, 2016

我们可以利用urllib来抓取远程的数据进行保存哦,以下是python3 抓取网页资源的多种方法,有需要的可以参考借鉴。

1、最简单

import urllib.request
response = urllib.request.urlopen('http://python.org/')
html = response.read()

2、使用 Request

import urllib.request
req = urllib.request.Request('http://python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()

3、发送数据

#! /usr/bin/env python3
import urllib.parse
import urllib.request
url = 'http://localhost/login.php'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {
'act' : 'login',
'login[email]' : 'yzhang@i9i8.com',
'login[password]' : '123456'
}
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data)
req.add_header('Referer', 'http://www.python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page.decode("utf8"))

4、发送数据和header

#! /usr/bin/env python3
import urllib.parse
import urllib.request
url = 'http://localhost/login.php'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {
'act' : 'login',
'login[email]' : 'yzhang@i9i8.com',
'login[password]' : '123456'
}
headers = { 'User-Agent' : user_agent }
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page.decode("utf8"))

5、http 错误

#! /usr/bin/env python3
import urllib.request
req = urllib.request.Request('https://3water.com ')
try:
urllib.request.urlopen(req)
except urllib.error.HTTPError as e:
print(e.code)
print(e.read().decode("utf8"))

6、异常处理1

#! /usr/bin/env python3
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("https://3water.com /")
try:
response = urlopen(req)
except HTTPError as e:
print('The server couldn't fulfill the request.')
print('Error code: ', e.code)
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
else:
print("good!")
print(response.read().decode("utf8"))

7、异常处理2

#! /usr/bin/env python3
from urllib.request import Request, urlopen
from urllib.error import URLError
req = Request("https://3water.com /")
try:
response = urlopen(req)
except URLError as e:
if hasattr(e, 'reason'):
print('We failed to reach a server.')
print('Reason: ', e.reason)
elif hasattr(e, 'code'):
print('The server couldn't fulfill the request.')
print('Error code: ', e.code)
else:
print("good!")
print(response.read().decode("utf8"))

8、HTTP 认证

#! /usr/bin/env python3
import urllib.request
# create a password manager
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# Add the username and password.
# If we knew the realm, we could use it instead of None.
top_level_url = "https://3water.com /"
password_mgr.add_password(None, top_level_url, 'rekfan', 'xxxxxx')
handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
# create "opener" (OpenerDirector instance)
opener = urllib.request.build_opener(handler)
# use the opener to fetch a URL
a_url = "https://3water.com /"
x = opener.open(a_url)
print(x.read())
# Install the opener.
# Now all calls to urllib.request.urlopen use our opener.
urllib.request.install_opener(opener)
a = urllib.request.urlopen(a_url).read().decode('utf8')
print(a)

9、使用代理

#! /usr/bin/env python3
import urllib.request
proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

a = urllib.request.urlopen("https://3water.com ").read().decode("utf8")
print(a)

10、超时

#! /usr/bin/env python3
import socket
import urllib.request
# timeout in seconds
timeout = 2
socket.setdefaulttimeout(timeout)
# this call to urllib.request.urlopen now uses the default timeout
# we have set in the socket module
req = urllib.request.Request('https://3water.com /')
a = urllib.request.urlopen(req).read()
print(a)

总结

以上就是这篇文章的全部内容,希望本文的内容对大家学习或使用python能有所帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python中针对函数处理的特殊方法
Mar 06 Python
python中enumerate的用法实例解析
Aug 18 Python
Python中的getopt函数使用详解
Jul 28 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
python中的错误如何查看
Jul 08 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 #Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 #Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 #Python
Python 爬虫学习笔记之正则表达式
Sep 21 #Python
Python简单实现安全开关文件的两种方式
Sep 19 #Python
Python打包可执行文件的方法详解
Sep 19 #Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 #Python
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
javascript 写类方式之四
2009/07/05 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
Python批量修改文本文件内容的方法
2016/04/29 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
Overload和Override的区别
2012/09/02 面试题
领导检查欢迎词
2014/01/14 职场文书
食堂个人先进事迹
2014/01/22 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
MongoDB支持的数据类型
2022/04/11 MongoDB
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android