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

1 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地址/') 等。

示例程序:

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

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

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

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

1 >>>f.geturl()

接下来是urllib的代理设置:

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

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

查看urllib的源码:

01 def urlopen(url, data=None, proxies=None):
02     """urlopen(url [, data]) -> open file-like object"""
03     global _urlopener
04     if proxies is not None:
05         opener = FancyURLopener(proxies=proxies)
06     elif not _urlopener:
07         opener = FancyURLopener()
08         _urlopener = opener
09     else:
10         opener = _urlopener
11     if data is None:
12         return opener.open(url)
13     else:
14         return opener.open(url, data)

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

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

最新文章

  1. 关于 JSONP跨域示例
  2. 11.ok6410之led驱动程序编写
  3. 使用delphi+intraweb进行微信开发1--微信平台接入
  4. Thinking in java学习笔记之finalize
  5. webkit的一些不为人知的高级属性
  6. NDK学习三: 纯手工编译Hello World
  7. 常用chrome插件推荐
  8. mvc与三层结构
  9. ubuntu安装php mcrypt扩展
  10. Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化
  11. 19SpringMvc_在业务控制方法中收集List集合中包含JavaBean参数
  12. Java SE series:1. environment configure and Hello world! [We use compiler and packager to create an application!]
  13. 任务调度 QUARTZ
  14. PHP5 session 详解
  15. android Animation动画的xml使用
  16. flink源码编译(windows环境)
  17. UDP单播,广播,多播
  18. 听说尤雨溪在开发vue4.0?是谁煽动了前端圈的焦虑情绪
  19. 数据可视化 seaborn绘图(1)
  20. 《JavaScript高级程序设计》笔记:在HTML中使用Javascript(二)

热门文章

  1. [LeetCode] Letter Combinations of a Phone Number(bfs)
  2. [LeetCode]题解(python):054-Spiral Matrix
  3. HTML标签的改变
  4. Java学习-038-JavaWeb_007 -- JSP 动作标识 - plugin
  5. Exception not a valid month
  6. Linux命令行–更多bash shell命令(转)
  7. 分享一个移动项目中消除click事件点击延迟的方法
  8. 通过 ec2-api / boto 调用 OpenStack 功能
  9. Android之绚丽的图片游览效果--有点像W7效果,透明的倒影,层叠的图片,渐变的颜色透明度
  10. 海康威视摄像头SDK-网页版(NetVideoActiveX23.cab安装)