python urllib urlopen()对象方法/代理的补充说明


Posted in Python onJune 29, 2017

python urllib urlopen()对象方法/代理的补充说明

urllib 是 python 自带的一个抓取网页信息一个接口,他最主要的方法是 urlopen(),是基于 python 的 open() 方法的。下面是主要说明:

urllib.urlopen('网址')

这里传入urlopen()的参数有特别说要求,要遵循一些网络协议,比如http,ftp,也就是说,在网址的开头必须要有http://这样的说明,如:urllib.urlopen('http://www.baidu.com')。

要么就是本地文件,本地文件需要使用file关键字,比如 urllib.urlopen('file:nowamagic.py'),注意,这里的hello.py是指的是当前的classpath所指定的内容,如果对hello.py这里有什么疑问那一定是python寻找classpath的顺序不是很清楚了,当然也可以直接写全部路径,urllib.urlopen('file:F:\pythontest\nowamagic.py')。

打开 ftp 文件也是可以的,写法 urllib.urlopen(url='ftp://用户名:密码@ftp地址/') 等。

示例程序:

import urllib
f = urllib.urlopen('file:F:\pythontest\nowamagic.py')
a = f.read()
print a

如果传入的参数正确,比如该网站可以访问,没有特殊情况(比如需要代理,被墙等),那么将返回一个类似于文件对象的对象。即上面代码中的f,f对象有的方法一些操作方法,使用dir(f):

['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close', 'fileno', 'fp', 'geturl', 'headers', 'info', 'next', 'read', 'readline', 'readlines', 'url']

使用read()方法会将所有内容读取出来,并且同时f对象类似于先入先出的数据,在使用f.read()将得不到任何数据,也就是说,得到的数据在这个时候如果想在后面进行任何处理操作的话,需要另外定义一个对象来进行存储。如上例中的a。而info(),geturl()方法,也是基于f这个文档对象的,所以,使用

>>>f.geturl()
 'F://pythontest//nowamagic.py'

接下来是urllib的代理设置:

import urllib
proxies = {'http':'http://***.***.***.***:1984'}
filehandle = urllib.urlopen('http://www.需要代理才能访问的网站.com/',proxies = proxies)
a = filehandle.read()
print a

以上是最基本代理,即代理访问到该网站,并且能够获得该网站的内容。但是如果遇到需要登录,或者需要cookie等的网站呢?

查看urllib的源码:

def urlopen(url, data=None, proxies=None):
  """urlopen(url [, data]) -> open file-like object"""
  global _urlopener
  if proxies is not None:
    opener = FancyURLopener(proxies=proxies)
  elif not _urlopener:
    opener = FancyURLopener()
    _urlopener = opener
  else:
    opener = _urlopener
  if data is None:
    return opener.open(url)
  else:
    return opener.open(url, data)

由上面urllib的urlopen的源码,可以看出,还可以传入一个data参数,data参数也应该是一个字典,因为在使用浏览器向服务器发送数据的时候,我们发送的就是字典类型的数据。

还有一点,就是代理支持是 python 2.3 以后加入的。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python中sets模块的用法实例
Sep 30 Python
详解python开发环境搭建
Dec 16 Python
python机器学习之神经网络(二)
Dec 20 Python
python切片及sys.argv[]用法详解
May 25 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
Python接口测试文件上传实例解析
May 22 Python
python笔记:mysql、redis操作方法
Jun 28 #Python
老生常谈Python序列化和反序列化
Jun 28 #Python
python flask实现分页效果
Jun 27 #Python
Django自定义分页效果
Jun 27 #Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 #Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 #Python
Python的装饰器使用详解
Jun 26 #Python
You might like
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
smarty获得当前url的方法分享
2014/02/14 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python3下pygame如何实现显示中文
2020/01/11 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
销售会计岗位职责
2014/03/15 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
大学社团计划书
2014/05/01 职场文书
服务标语口号
2014/07/01 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
vue的项目如何打包上线
2022/04/13 Vue.js