免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5120 | 回复: 7
打印 上一主题 下一主题

urllib2使用总结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-07 21:45 |只看该作者 |倒序浏览
本帖最后由 Tinylamb 于 2012-03-08 09:02 编辑

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登录人人网的过程

说明:
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?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2012-03-07 22:13 |只看该作者
很好,顶lz的分享精神
为python版需要抓网页的同胞们提供了有价值的指引

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
3 [报告]
发表于 2012-03-08 09:18 |只看该作者
验证码呢?

论坛徽章:
0
4 [报告]
发表于 2012-03-08 10:58 |只看该作者
回复 3# bikong0411


    我首先想到的是用PIL来处理。自己还没有写出来算法。

论坛徽章:
0
5 [报告]
发表于 2012-03-09 00:12 |只看该作者
请问下楼主你那个彩色的是什么编辑器那?怎么看着有种xcode的感觉那? 问下

论坛徽章:
0
6 [报告]
发表于 2012-03-09 09:12 |只看该作者
本帖最后由 paktc 于 2012-03-09 09:21 编辑

回复 5# airstorm


    感觉背景和颜色有点像ubuntu下的gedit 不过字体不太像

论坛徽章:
0
7 [报告]
发表于 2012-03-09 11:31 |只看该作者
回复 5# airstorm


    编辑器是vim
    颜色,字体分别是 desert ,Consolas

论坛徽章:
0
8 [报告]
发表于 2012-03-12 14:07 |只看该作者
回复 6# paktc


    明显更像是notepad++默认的颜色和显示界面
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP