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抓去网页内容

    在Python中通过导入urllib2组件,来完成网页的抓取工作.在python3.x中被改为urllib.request. 爬取具体的过程类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求 ...

  2. Python urllib2 调试

    #!/usr/bin/env python # coding=utf-8 __author__ = 'zhaoyingnan' import urllib import urllib2 import ...

  3. 使用urllib2打开网页的三种方法

    #coding:utf-8 import urllib2 import cookielib url="http://www.baidu.com" print '方法 1' resp ...

  4. No module named 'urllib2'

    import urllib2 response = urllib2.urlopen('http://www.baidu.com/') html = response.read() print html ...

  5. Python自动化测试 (九)urllib2 发送HTTP Request

    urllib2 是Python自带的标准模块, 用来发送HTTP Request的.  类似于 .NET中的,  HttpWebRequest类 urllib2 的优点 Python urllib2 ...

  6. urllib2抓取HTML存入Excel

    通过urllib2抓取HTML网页,然后过滤出包含特定字符的行,并写入Excel文件: # -*- coding: utf-8 -*- import sys #import urllib import ...

  7. [Python] urllib2.HTTPError: HTTP Error 403: Forbidden

    搬运自http://www.2cto.com/kf/201309/242273.html,感谢原作. 之所以出现上面的异常,是因为如果用 urllib.request.urlopen 方式打开一个UR ...

  8. python urllib2 发起http请求post

    使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...

  9. cookielib和urllib2模块相结合模拟网站登录

    1.cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用 本模块的CookieJar类的对 ...

  10. 使用python标准库urllib2访问网页

    #访问不需要登录的网页import urllib2target_page_url='http://10.224.110.118/myweb/view.jsp' f = urllib2.urlopen( ...

随机推荐

  1. FeatureLayer,FeatureDataset,FeatureClass,Feature的区别与联系总结

    duckweeds原文 FeatureLayer,FeatureDataset,FeatureClass,Feature几个概念一点点总结,欢迎指教 刚学AE,其中很多概念都模糊不清.经过一段时间的摸 ...

  2. [Node.js] Testing ES6 Promises in Node.js using Mocha and Chai

    Writing great ES6 style Promises for Node.js is only half the battle. Your great modules must includ ...

  3. JavaScript、Ajax与jQuery的关系 分类: C1_HTML/JS/JQUERY 2014-07-31 10:15 3388人阅读 评论(0) 收藏

    简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装 ...

  4. text输入框改变事件

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...

  5. 指针知识梳理6-const与指针

    const 定义的变量为仅仅读变量.在语法层面上通过这个变量去改动内存是不同意的. 可是对于下面代码.就有非常多人绕了: const int  *p1;  //p1能变.*p1不能变 int cons ...

  6. 结构体(struct)与类(class)

    在 C++ 的范畴里,除了 struct 结构体不支持访问权限修饰符(private.protected.public)外,已不再区分二者的其他方面语法上的差异. 因此,在 C++ 编程中,如果一个类 ...

  7. style.height、offsetHeight、clientHeight、scrollHeight的差别

    style.height 包含元素的滚动栏,不包含边框 clientHeight 不包含元素的滚动栏和边框 offsetHeight 包含元素的滚动栏和边框 scrollHeight offsetHe ...

  8. 【hdu 1517】A Multiplication Game

    Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  9. 找不到头文件xxxxx.h file not found

    项目里有该文件,但是还是显示找不到.或者是cocopods打开的项目. 原因:.h文件路径找不到.具体找不到的原因有很多种. 1.一般会设置 IOS引用三方framewrok的头文件出现'xxxxx/ ...

  10. findbugs静态代码分析工具使用教程

    FindBugs 是一个静态分析工具,很多程序猿都在使用,再次详细列出findbugs的使用教程,希望对大家有帮助. 1 安装 FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行 ...