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. 机器学习算法笔记1_2:分类和逻辑回归(Classification and Logistic regression)

    形式: 採用sigmoid函数: g(z)=11+e−z 其导数为g′(z)=(1−g(z))g(z) 如果: 即: 若有m个样本,则似然函数形式是: 对数形式: 採用梯度上升法求其最大值 求导: 更 ...

  2. swift入门之TableView

    IOS8更新了,oc还将继续但新增了swift语言,能够代替oc编写ios应用,本文将使用swift作为编写语言,为大家提供step by step的教程. 工具 ios每次更新都须要更新xcode, ...

  3. crx

    https://www.crx4chrome.com/down/770/crx/ Downloading crx file for Linkclump The Linkclump crx file y ...

  4. Android MediaScanner使用简单介绍

    1. 运行扫描 仅仅有系统开机的时候才会运行MediaScanner,其他情景下须要手动运行扫描(拍摄,下载等). 手动运行扫描的方法是发送MediaScanner广播: 1.1 扫描指定文件: In ...

  5. Cocos2d-x学习笔记(16)(常见22种特效)

    1.CCShaky3D::create(int range.bool shakeZ,const ccGridSize& gridSize,float duration)//创建一个3D晃动的特 ...

  6. [Javascript] Create scrollable DOM elements with Greensock

    In this lesson, we will look at Greensock's Draggable API. We will implement a scrollable <div> ...

  7. Linux下 kprobe工具的使用

    此处转载: 一.Kprobe简单介绍 kprobe是一个动态地收集调试和性能信息的工具,它从Dprobe项目派生而来,是一种非破坏性工具,用户用它差点儿能够跟踪不论什么函数或被运行的指令以及一些异步事 ...

  8. c3p0 xml配置文件模版

    <c3p0-config> <default-config> <property name="driverClass">com.mysql.jd ...

  9. Vert.x ——概述

    Vert.x是什么 Vert.x(http://vertx.io/)是一个基于JVM.轻量级.高性能的应用平台,非常适用于最新的移动端后台.互联网.企业应用架构. Vert.x框架基于事件和异步,依托 ...

  10. [Ramda] Refactor to Point Free Functions with Ramda using compose and converge

    In this lesson we'll take some existing code and refactor it using some functions from the Ramda lib ...