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标准库之Sys模块使用详解
May 23 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python3基于sax解析xml操作示例
May 22 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
python实现大文本文件分割
Jul 22 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
python内置模块collections知识点总结
Dec 19 Python
Pytorch转onnx、torchscript方式
May 25 Python
Pycharm安装第三方库失败解决方案
Nov 17 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
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
jQuery实现本地存储
2020/12/22 jQuery
sqlalchemy对象转dict的示例
2014/04/22 Python
初步解析Python下的多进程编程
2015/04/28 Python
python实现数组插入新元素的方法
2015/05/22 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
六年级数学教学反思
2014/02/03 职场文书
标准毕业生自荐信
2014/06/24 职场文书
好人好事演讲稿
2014/09/01 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
2014年终个人工作总结
2014/11/07 职场文书
2014年班主任工作总结
2014/11/08 职场文书
写给老师的保证书
2015/05/09 职场文书
导游词之太原天龙山
2020/01/02 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers