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

作者:lqh 时间:2023-06-28 17:44:07 

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,urllib,urlopen()
0
投稿

猜你喜欢

  • 浅谈一次与sql注入 & webshell 的美丽“邂逅”

    2024-01-22 09:48:22
  • Python如何优雅获取本机IP方法

    2021-03-07 15:46:16
  • python多线程使用方法实例详解

    2023-08-18 17:34:00
  • python实现简单http服务器功能

    2023-03-24 15:36:58
  • 历数Firefox2.0对XML处理的改进

    2007-11-27 12:41:00
  • Java+Spring+MySql环境中安装和配置MyBatis的教程

    2024-01-12 23:23:48
  • Qt实现炫酷启动图动态进度条效果

    2021-09-05 21:56:53
  • 关于Pytorch的MNIST数据集的预处理详解

    2021-09-16 21:09:47
  • 卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法

    2011-11-03 16:49:09
  • 详解go中panic源码解读

    2024-03-22 08:22:51
  • VSCode Python开发环境配置的详细步骤

    2021-06-15 23:29:15
  • Pycharm激活码激活两种快速方式(附最新激活码和插件)

    2023-05-17 12:07:07
  • 在asp中调用sql server的存储过程方法

    2007-08-13 13:28:00
  • Go 语言 IDE 中的 VSCode 配置使用教程

    2024-02-20 23:27:36
  • SQL Server数据库内存会不断增加的问题分析

    2009-01-08 15:46:00
  • python得到单词模式的示例

    2021-04-22 08:25:48
  • 解决MySQL安装重装时出现could not start the service mysql error:0问题的方法

    2024-01-23 01:17:00
  • 使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

    2021-09-17 08:53:15
  • javascript实现依次输入input自动定焦

    2024-04-28 10:19:12
  • Pytorch之8层神经网络实现Cifar-10图像分类验证集准确率94.71%

    2022-03-03 21:14:36
  • asp之家 网络编程 m.aspxhome.com