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入门篇之编程习惯与特点
Oct 17 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
Python制作exe文件简单流程
Jan 24 Python
一文了解Python并发编程的工程实现方法
May 31 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
Python实现不规则图形填充的思路
Feb 02 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
python中温度单位转换的实例方法
Dec 27 Python
python实现黄金分割法的示例代码
Apr 28 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
PHP 数组教程 定义数组
2009/10/23 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
基于php下载文件的详解
2013/06/02 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
js获取url传值的方法
2015/12/18 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
浅谈node的事件机制
2017/10/09 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python对象转JSON字符串的方法
2016/04/27 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python构造IP报文实例
2020/05/05 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
银行职业规划书范文
2013/12/28 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
门面房租房协议书
2014/08/20 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL