urllib2使用总结

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登录人人网的过程 
id="iframe_0.02770243538543582" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://life.chinaunix.net/bbsfile/forum/201203/07/213420zbmliowr9o57b7jw.png?_=2392067%22%20style=%22border:none;max-width:966px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.02770243538543582',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-style: none; border-width: initial; width: 641px; height: 459px;">

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?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础第五课——用户管理

用户管理 一个用户必须有一个主组一个用户可以拥有多个组 但是必须一个主组 其它组是临时组一个组可以拥有多个用户用户的信息放到 /etc/passwd 用户的密码 存入 /etc/shadow 组信息存到 /etc/group添加用户 add useradd shengliang 这时候会在 /etc/passwd 下生成一条记录 she…

降调软件测试自学,普通话测试及变调.ppt

普通话测试及变调(二)去声变调 当两个去声字相连,前面的去声字不读重音的时候,调值由全降变为半降,51变为53。 错误 汉字 介绍 注意 外地 善意 艺术 戏剧 预告 降落 锻炼 倒退 大会 自治 迫害 照相 木料 正确 “一”变调?? ?1.??“一”在…

信守承诺:JAX-RS API的基于合同的测试

自从我们谈论测试和应用有效的TDD实践以来已经有一段时间了,特别是与REST(ful) Web服务和API相关的实践。 但是,这个主题永远都不应忘记,特别是在每个人都在做微服务的世界中,无论它意味着什么,…

P2084 进制转换

原题链接 https://www.luogu.org/problemnew/show/P2084 这个题的思路就是先将输入的数字存到字符数组里,然后求出这一串数字中的非0元素的个数total,并记录最后一位非0元素的位置。输出时,先输出total-1个,最后再补上第total个&a…

关于C++ const 的全面总结

C中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象…

国家普通话水平智能测试软件,国家普通话水平智能测试系统注意事项

国家普通话水平智能测试系统注意事项导语:为了让考生更顺利的通过普通话考试,下面是小编给大家提供的国家普通话水平智能测试系统注意事项,大家可以参考阅读,更多详情请关注应届毕业生考试网。一、登录阶段:1. 请正确佩…

从尾到头打印链表

题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 python solution: # -*- coding:utf-8 -*- class ListNode:def __init__(self, x):self.val xself.next Noneclass Solution:# 返回从尾部到头部的列表值序列,例如[1,2,3…

Advanced C++ -- Logic Constness and Bitwise Constness

首先介绍一下什么是Logic Constness和Bitwise Constness,Logic Constness指的是function 后的const修饰,我们只知道这个function被const修饰了,但是并没有任何变量被const,Bitwise Constness指的是变量(指针&#xff0…

计算机社团竞选优势6,社团社长竞选稿六篇

社团社长竞选稿六篇在社会一步步向前发展的今天,用到竞选稿的地方越来越多,竞选稿可以帮助竞选者更好地表达。还是对竞选稿一筹莫展吗?以下是小编为大家收集的社团社长竞选稿6篇,仅供参考,希望能够帮助到大家。社团社长…

使用Spring创建用于JUnit测试的JNDI资源

直到最近,我还使用静态方法来设置内存数据库(HSQLDB)。 我在JUnit测试的setUp / tearDown中调用了这些方法。 当我使用Spring时,这总是让我感到不自然,并且所有内容都应在其应用程序上下文中运行。 创建一个简单的JND…

安装Office Visio 提示Office 16 Click-to-Run Extensibility Component

今天在安装 Office Visio 2016 时,点击安装程序,出现以下错误: 出现这个问题的原因就是你的电脑以前安装过32位的office,卸载时,注册表没有清理干净。 解决方案: 在win10系统的左下搜索框内,输入…

加密安装Kli Linux

从U盘启动然后安装Kali是我们最喜欢并且是运行Kali最快(容易)的方法.为此,我们首先要把Kali的ISO克隆到U盘.如果你经常使用Kali Linux U盘,请在克隆前阅读完整的文档。 Kali Linux安装系列阅读: 用Live U盘安装Kali Linux http://www.linuxidc.com/Linux/2014-05/1…

hp服务器370G5硬盘列阵,hp DL380 g5创建raid阵列安装系统准备工作

RAID 1称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一…

服务器设备性能说明,OMC服务器硬件性能和配置说明.doc

OMC服务器硬件性能和配置说明PAGEOMC服务器硬件性能和配置说明TIME \ "yyyy年M月" \* MERGEFORMAT 2011年1月 PAGE 5目 录 TOC \t "Heading 1,1,Heading 2,2,Heading 3,4,Heading2 No Number,2,Heading3 No Number,3,About This Chapter,3,Subtitle,2" 第1…

编译错误syntax error : missing ';' before 'type'原因探寻

在VC6中运行以下代码 //main.c #include <stdio.h> int main() { chara[100]; memset(&a, 0, 100); charb; return 0; } / 编译器将会报一个编译错误&#xff0c; syntax error : missing ; before type 这个错误出在 char b; 这一行。 然后将程序改为 //…

谷歌guava_Google Guava BiMaps

谷歌guava接下来的番石榴之旅是另一个有用的收藏类型BiMap 。 实际上&#xff0c;这非常简单&#xff0c;BiMap只是双向地图。 反转地图 普通的Java映射是一组键和值&#xff0c;您可以按键查找值&#xff0c;这非常有用&#xff0c;例如&#xff0c;说我想创建一个&#xff0…

outlook设置263邮件服务器,大神详解win10系统怎么在Outlook中添加263邮箱的详细教程...

win10系统有很多人都喜欢使用,我们操作的过程中常常会碰到对win10系统怎么在Outlook中添加263邮箱的设置方法&#xff0c;想必大家都遇到过需要对win10系统怎么在Outlook中添加263邮箱进行设置的情况吧&#xff0c;那么应该怎么设置win10系统怎么在Outlook中添加263邮箱究竟该怎…

使用DynamoDB映射器将DynamoDB项目映射到对象

以前&#xff0c;我们使用Java创建了DynamoDB表。 对于各种数据库&#xff08;例如sql数据库或nosql&#xff09;&#xff0c;有一组工具可帮助访问&#xff0c;持久化和管理对象/类与基础数据库之间的数据。 例如&#xff0c;对于SQL数据库&#xff0c;我们使用JPA&#xff0…

linux 命令 find -exec 操作的问题

最近有这样一个需求&#xff0c;删掉某目录下的一些文件夹。其实就是名为“CVS”的文件夹&#xff0c;用过CVS的人都知道&#xff0c;CVS会在目录的每一级建立一个名为CVS的文件夹&#xff0c;里面放着CVS相关信息&#xff0c;我需要将某目录下所有的名为“CVS”的文件夹删掉。…

雷林鹏分享:C# 运算符

C# 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符&#xff0c;分类如下&#xff1a; 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本教程将逐一讲解算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及…