keywords:

  1. urllib2,BeautifulSoup,cookielib

题外话:
小弟是编程爱好者,各位看官轻拍。
最近在使用urllib2抓取网页内容,在学习的过程中也查阅了不少资料,并从中收获很多。在查阅资料的过程中,我发现大部分资料都是建立在对urllib2的熟悉基础之上,程序的细节并未顾及到新手看到这份资料会产生怎样的困惑。在接下来的内容中,我会写到我碰到的疑问以及解决方法。如果你也碰到类似的困惑,希望给予你帮助。
一.urllib2简介
urllib2提供一个基础函数urlopen,通过向指定的URL发出请求来获取数据。最简单的形式就是

  1. import urllib2
  2. response=urllib2.urlopen('http://www.douban.com')
  3. html=response.read()

这个过程就是我们平时刷网页的代码表现形式,它基于请求-响应模型。

  1. response=urllib2.urlopen('http://www.douban.com')

实际上可以看作两个步骤:
我们指定一个域名并发送请求
1.

  1. request=urllib2.request('http://www.douban.com')

接着服务端响应来自客户端的请求
2.

  1. response=urllib2.urlopen(request)

也许你会注意到,我们平时除了刷网页的操作,还有向网页提交数据。这种提交数据的行为,urllib2会把它翻译为:

  1. import urllib
  2. import urllib2
  3. url = 'http://www.douban.com'
  4. info = {'name' : 'Michael Foord',
  5. 'location' : 'Northampton'}
  6. data = urllib.urlencode(info)  #info 需要被编码为urllib2能理解的格式,这里用到的是urllib
  7. req = urllib2.Request(url, data)
  8. response = urllib2.urlopen(req)
  9. the_page = response.read()

有时你会碰到,程序也对,但是服务器拒绝你的访问。这是为什么呢?问题出在请求中的头信息(header)。
有的服务端有洁癖,不喜欢程序来触摸它。这个时候你需要将你的程序伪装成浏览器来发出请求。请求的方式就包含在header中。
常见的情形:

  1. import urllib
  2. import urllib2
  3. url = 'http://www.someserver.com/cgi-bin/register.cgi'
  4. user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'# 将user_agent写入头信息
  5. values = {'name' : 'Michael Foord',
  6. 'location' : 'Northampton',
  7. 'language' : 'Python' }
  8. headers = { 'User-Agent' : user_agent }
  9. data = urllib.urlencode(values)
  10. req = urllib2.Request(url, data, headers)
  11. response = urllib2.urlopen(req)
  12. the_page = response.read()

二.示例
模拟一个利用cookie登录人人网的过程

2012-03-07 21:34 上传

下载附件 (33.07 KB)

说明:
1.人人网的登录地址需要用BeautifulSoup来抓取。
2.个人信息存在info中。info是一个字典{'email':'xx','password':'xx'}.key的命名需要根据实际网页中定义,比如豆瓣的定义是{'form_email':'xx','form_password':'xx'}
3.使用cookie的好处在于,登录之后你可以使用cookie中保存的信息作为头信息的一部分,利用已经保存的头信息接着访问网站。

参考:
HOWTO Fetch Internet Resources Using urllib2
Beautiful Soup 中文文档
How to use Python to login to a webpage and retrieve cookies for later usage?

urllib2使用总结相关推荐

  1. Python:urllib2模块的URLError与HTTPError

    urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误. 这里主要说的是U ...

  2. Python:urllib2模块Handler处理器 和 自定义Opener

    Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构 ...

  3. Python:urllib2模块的基本使用

    urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,我们先学习urllib2. urllib2 是 P ...

  4. pythonurllib标准_Python标准库urllib2的一些使用细节总结

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 的使用细节. 1.Pr ...

  5. 利用urllib2实现http post请求源码示例

    在python中利用urllib2或是pycurl都可以实现http POST请求功能,下面是源码: #!/usr/bin/env python #encoding: utf-8 #descripti ...

  6. 爬虫原理与数据抓取----- urllib2:URLError与HTTPError

    urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误. 这里主要说的是U ...

  7. python urllib2 开启调试

    2019独角兽企业重金招聘Python工程师标准>>> 发一段在网上看见. USING HTTPLIB.HTTPCONNECTION.SET_DEBUGLEVEL() WITH UR ...

  8. Python urllib和urllib2模块学习(一)

    (参考资料:现代魔法学院 http://www.nowamagic.net/academy/detail/1302803) Python标准库中有许多实用的工具类,但是在具体使用时,标准库文档上对使用 ...

  9. Python中urllib2总结

    使用Python访问网页主要有三种方式: urllib, urllib2, httplib urllib比较简单,功能相对也比较弱,httplib简单强大,但好像不支持session 1. 最简单的页 ...

  10. 在python3.3后urllib2已经不能再用,只能用urllib.request来代替

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在python3.3后urllib2已经不能再用,只能用urllib.request来代替 response=urllib2.urlopen(' ...

最新文章

  1. 成功解决ValueError: Invalid format string
  2. metasploit篇-01
  3. 2019-02-26-算法-进化(字符串转换成整数)
  4. hbase hfile java_通过生成HFile导入HBase
  5. hadoop配置文件还原_hadoop配置文件详解,安装及相关操作
  6. PHP 发送GET 和 POST数据的方法分析
  7. hive-2.3.3安装指北
  8. 用CSS实现花里胡哨的按钮切换效果
  9. linux截图验证码,webdriver保存验证码截图
  10. 结对项目——最长英语单词链
  11. windows10中Office2016自定义安装、visio的安装,并安装到其他盘的方法
  12. 阅读5Incorporating travel behavior regularity into passenger flow forecasting
  13. TL431和PC817在开关电源中的工作详解
  14. JAVA 二叉树 常见操作合集(前中后序递归非递归遍历 层序遍历 求深度宽度 判断兄弟结点 堂兄弟节点)
  15. Git的使用(保姆级教程)
  16. 半导体物理实验 01 - | 晶体结构构建、仿真与分析
  17. 使用RANSAC的鲁棒TDOA Chan定位算法
  18. 【起】Redis 概述篇——带你走过 Redis 的前世今生
  19. Integrating Dokuwiki with Mantis
  20. VC6工程升级VS2013汇总

热门文章

  1. jfinal获取url链接上面传来的string类型的值_每个公司都会用的短 URL 服务,怎么设计与实现?...
  2. 3.逆向分析Hello World!程序-下
  3. 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 )
  4. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 二 )
  5. 【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )
  6. Google protobuf使用技巧和经验
  7. Host is not allowed to connect to this MySQL server解决方法
  8. 简单多边形与圆交面积模板
  9. 生活实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决?
  10. Unity Shader——Writing Surface Shaders(2)——Custom Lighting models in Surface Shaders