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使用CMD模块更优雅的运行脚本
May 11 Python
python开发中module模块用法实例分析
Nov 12 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
python实现趣味图片字符化
Apr 30 Python
Python配置虚拟环境图文步骤
May 20 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
flask 实现token机制的示例代码
Nov 07 Python
Python实现元素等待代码实例
Nov 11 Python
mac使用python识别图形验证码功能
Jan 10 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 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
php自动加载autoload机制示例分享
2014/02/20 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP异常处理Exception类
2015/12/11 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
教师旷工检讨书
2014/01/18 职场文书
汉语言文学职业规划
2014/02/14 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
信用卡催款律师函
2015/05/27 职场文书
MySQL创建定时任务
2022/01/22 MySQL
mysql sock文件存储了什么信息
2022/07/15 MySQL