Python爬虫初步

来源:互联网 发布:ksweb mysql 编辑:程序博客网 时间:2024/04/28 21:15

Python爬虫初步


这里要介绍一下urllib2这个模块

作用:主要是用于打开url。
核心方法:
- urlopen(url[, data][, timeout])
- 打开一个url,该url参数可以是一个string也可以是一个 Request 对象(后有介绍)。
- data参数可以是一个指定的字符串,该字符串将会送往服务器。(date应该是在标准application/ x-WWW-form-urlencoded格式的缓冲,函数urllib.urlencode()将会执行一个映射或是二元组序列返回一个该格式的字符串)
- timeout指定连接尝试的时间
- urlopen返回一个类文件的对象,该对象有三个方法:
- geturl():返回这个资源的真实url,如果网站有重定向则有用。
- info():返回打开该网站的头文件信息
- getcode():返回HTTP连接状态码
- 如果打开失败会返回一个URLError

import urllib2resp=urllib2.urlopen('http://www.baidu.com/')print resp.geturl()print resp.info()print resp.getcode()#结果:http://www.baidu.com/Date: Sun, 16 Nov 2014 06:25:25 GMTContent-Type: text/html; charset=utf-8Transfer-Encoding: chunkedConnection: CloseVary: Accept-EncodingSet-Cookie: BAIDUID=E9E8EBF8D18F7A2F362B473DF71EC228:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BAIDUPSID=E9E8EBF8D18F7A2F362B473DF71EC228; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BDSVRTM=0; path=/Set-Cookie: BD_HOME=0; path=/Set-Cookie: H_PS_PSSID=8266_1458_9593_7800_9584_9475_9499_9510_9769_10024_9757_9477_7798_9454_9978_9023; path=/; domain=.baidu.comP3P: CP=" OTI DSP COR IVA OUR IND COM "Cache-Control: privateCxy_all: baidu+89ed3fe869baaeddad6bcd025a131cacExpires: Sun, 16 Nov 2014 06:24:36 GMTX-Powered-By: HPHPServer: BWS/1.1BDPAGETYPE: 1BDQID: 0xd591f85500217bb1BDUSERID: 0200
  • install_opener(opener)

    • 生成一个OpenerDirector(后面有叙述)实例作为默认的全局opener。使用opener需要通过urlopen(),与OpenerDirector.open()是相等的。
  • build_opener([handler, …])

    • 返回一个OpenerDirector实例,这个实例包含了所给的handler,handler可以是BaseHandler或其子类的实例

Request对象

OpenerDirector对象

BaseHandler对象

HTTPRedirectHandler对象

HTTPCookieProcessor对象

ProxyHandler对象

HTTPPasswordMgr对象

AbstractBasicAuthHandler对象

HTTPBasicAuthHandler对象

ProxyBasicAuthHandler对象

AbstractDigestAuthHandler对象

ProxyDigestAuthHandler对象

HTTPHandler对象

HTTPSHandler对象

FileHandler对象

FTPHandler对象

UnknownHandler对象

HTTPErrorProcessor对象


实例

使用cookie打开:

#-*-coding:utf-8 -*-import urllib2opener = urllib2.build_opener()opener.addheaders = [('Cookie','name=something')]resp=opener.open('http://www.zhihu.com')print resp.read()

全部代码:

#-*-coding:utf-8 -*-import urllib2from string import stripimport refrom datetime import datetimedef getHtml(url,cookie=None):#打开url(可能携带cookie)并返回其html(字符串形式)    opener = urllib2.build_opener()    if(cookie):        opener.addheaders = [('Cookie',cookie)]    resp=opener.open(url)    return resp.read()def matchItem(patternString,targetString):#正则表达式匹配需要的数据    pattern=re.compile(patternString,re.I|re.S)    myItem=pattern.finditer(targetString)    return myItemdef matchNext(patterString,targetString):#正则匹配下一页    pattern=re.compile(patterString,re.I|re.S)    match=pattern.search(targetString)    if match:        return match.group('next')    else:        return Nonedef saveItem(items,*itemNames):#操作得到的数据    for item in items:        book=dict()        for itemName in itemNames:            if(itemName=='time'):                book[itemName]=datetime.strptime(strip(item.group(itemName)),'%Y-%m-%d')            else:                book[itemName]=strip(item.group(itemName))        print book['title'],book['author'],book['stat'],book['comment']if __name__ == '__main__':    cookie='你的cookie信息'#可忽略    nextUrl='http://book.douban.com/mine?status=collect'#爬虫网址    while nextUrl://循环爬虫,知道没有下一页信息        html=getHtml(url=nextUrl,cookie=cookie)        #正则表达式提取一本书的信息        pattern=r'<div class="info">.*?<a.*?title="(?P<title>.*?)".*?>.*?<div class="pub">(?P<author>.*?)/.*?<span class="rating(?P<stat>\d).*?">+?.*?<span class="date">(?P<time>.*?)\s.*?(</span)+?.*?<p class="comment">"?(?P<comment>.*?)"?<+?'        items=matchItem(pattern,html)        saveItem(items,'title','author','stat','time','comment')        #正则表达式匹配下一页        patternOfNext=r'<span class="next">.*?<a\s+href="(?P<next>.*?)"\s*.*?<div class="aside">'        nextUrl=matchNext(patternOfNext,html)

结果
数据库系统概念 (美)Abraham Silberschatz、(美)Henry F.Korth、(美)S.Sudarshan 5 书是经典,只是读了一半就给我了很多收获,但是后面部分不符合我对这本书的期望(希望是能更好的使用数据库而不是设计数据库),也就是说我对这本书定位错了,当我有这颗心的适合才来阅读估计更好,现在再看这书应该是跟着课堂老师走了。
C和指针 Kenneth A.Reek 5 C的最佳!
费马大定理 西蒙·辛格 5 读着超赞!
仙剑奇侠传4 管平潮 4
古剑奇谭·琴心剑魄 某树、宁昼 4
数学之美 吴军 5
仙剑奇侠传3 管平潮 4
仙剑奇侠传2 管平潮 4
仙剑奇侠传1 管平潮 4
MongoDB权威指南 霍多罗夫 (Kristina Chodorow) 4 Mongo简直是黑科技,只看了半本,另外半本应该暂时用不到,等用到时候再看,至于四星原因是- -目测它14年的最新版不知道是在干什么,差了Mongo两个版本
王小波全集(第一卷 杂文) 王小波 5
鸟哥的Linux私房菜.基础学习篇(第三版) 鸟哥 5
Python学习手册(第4版) [美] Mark Lutz 5
HTML5秘籍 Matthew MacDonald 5
人类群星闪耀时 茨威格 3
算法(第4版) 塞奇威克 (Robert Sedgewick)、韦恩 (Kevin Wayne) 5 读完了大部分,最后一些没读,很多课后题都只是看了一下,没有代码实现,将书上的代码大多数都实现并看懂,估计遇到实际问题还是会再次翻阅,一本入门算法的好书
观止-微软创建NT和未来的夺命狂奔 G.Pascal Zachary 3
京华烟云(套装上下册) 林语堂 4
计算机网络 谢希仁 4
我讲个故事,你可别当真啊 囧叔 3
我们能做什么 胡适 4
美丽新世界 阿道司·赫胥黎 (Aldous Huxley) 5 对于1984而言,我认为那个畸形的社会是迟早要被推翻的,因为少了幸福,而对于美丽新世界我真心找不到任何能推翻它的迹象,里面分工明确,生活无忧,如柏拉图的理想国般,对于国家社会而言这个整体几乎是完美有序的,但是对于社会中的个人而这个幸福是建立在对自由,自我的牺牲上来的。
大教堂与集市(中文版首次出版) (美)Eric S. Raymond 4
Python Cookbook Alex Martelli、Anna Ravenscroft、David Ascher 4
精通正则表达式 Jeffrey E. F. Friedl 5
创业时, 我们在知乎聊什么? 知乎 2
起风了·菜穗子 (日) 堀辰雄 3
JavaScript高级程序设计(第3版) [美] Nicholas C. Zakas 5 查看查看
靠自己去成功 刘墉 3
星际迷航-红衫 (美)约翰·斯卡尔齐 3
Python基础教程 Magnus Lie Hetland 4
拆掉思维里的墙 古典 3 要是这本书打了四星对不起我打四星的书了
1984 [英] 乔治·奥威尔 5
HTTP权威指南 David Gourley、Brian Totty 5
西方哲学史 罗素 4 还没有读完,留着鞭尸……
人生 路遥 4
24重人格 [美] 卡梅伦·韦斯特|者:李永平 5 心理学方面很好的小说
死亡通知单·暗黑者 周浩晖 4 推理小说,比起其他的国内推理小说算是很不错了
思考,快与慢 [美] 丹尼尔·卡尼曼 4
高效程序员的45个习惯 Venkat Subramaniam、Andy Hunt 4
自卑与超越 阿尔弗雷德·阿德勒 4
算法竞赛入门经典 刘汝佳 4
网络工程师教程 雷震甲 编 2
现代操作系统 Andrew S. Tanenbaum 5
算法导论 [美] Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein 5
锋利的jQuery 单东林、张晓菲、无魏然 4 基本略读了一遍,但用时候需要查阅
失控 [美] 凯文·凯利 4 还未读完,留到以后
PHP和MySQL Web开发(原书第4版) Luke Welling、Laura Thomson 5
PHP深度分析 2010-1 3
影响力 [美] 罗伯特·西奥迪尼 4 利用悠久的习惯来制作的圈套,但这些习惯在大多数时候都是极其有用的,如果自己在做事的时候如果能不急就可以避免大多数陷阱了
倚天屠龙记(共四册) 金庸 5
那些年,我们一起追的女孩 九把刀 3
肖申克的救赎 [美] 斯蒂芬·金 4
射雕英雄传(全四册) 金庸 5
地下铁 幾米 3
神雕侠侣 金庸 5
笑傲江湖(全四册) 金庸 4
天龙八部(全五册) 金庸 5
向左走·向右走 幾米 5
何以笙箫默 顾漫 2
达·芬奇密码 [美] 丹·布朗 4
追风筝的人 [美] 卡勒德·胡赛尼 4
活着 余华 4
文化苦旅 余秋雨 5
老人与海 海明威 4
Head First HTML与CSS(第2版) Elisabeth Robson、Eric Freeman 5
冰鉴 曾国藩 4
三体Ⅲ 刘慈欣 5
三体Ⅱ 刘慈欣 5
三体 刘慈欣 5
海边的卡夫卡 [日] 村上春树 3
挪威的森林 [日] 村上春树 4
百年孤独 [哥伦比亚] 加西亚·马尔克斯 4
富爸爸穷爸爸 [美]罗伯特.T.清崎 5
SQL学习指南 [美] Alan Beaulieu 5
围城 钱锺书 4
暗时间 刘未鹏 5 没有读过的该读一读
小王子 [法] 圣埃克苏佩里 5
天才在左 疯子在右 高铭 2 这只是一本小说而不是其他什么学科著作
了不起的盖茨比 菲茨杰拉德 4
西游日记 今何在 5 为悟空传也脑残五星
黑客与画家 [美] Paul Graham 5 简直就是程序员的心灵鸡汤- -
少有人走的路 [美] M·斯科特·派克 4
C程序设计语言 (美)Brian W. Kernighan、(美)Dennis M. Ritchie 5 这是我见过的最好的C入门的书,不尽在于此书将C语言的语法清楚的描绘给初学者,而且书中所提及的案例尤其重要,如二分查找,树等等
紫川(全五册) 老猪 5
悟空传 今何在 5
像外行一样思考,像专家一样实践——科研成功之道 (日)金出武雄 5
拖延心理学 [美] 简·博克(Jane B. Burka)、[美] 莱诺拉·袁(Lenora M. Yuen) 4
平凡的世界 路遥 5
做最好的自己 李开复 4
数据结构与算法分析 Mark Allen Weiss (维斯) 5
JAVA核心技术(卷1) Cay S. Horstmann、Gary Cornell 5
大话数据结构 程杰 4
乌合之众 (法)古斯塔夫.勒庞 5
如何阅读一本书 [美] 莫提默·J. 艾德勒、查尔斯·范多伦 5 阅读理解,能深入理解一本书,以平等的视角看待每一本书,深入书与作者,可谓是读一书识百书
自控力 [美] 凯利·麦格尼格尔 5
世界是平的(3.0版) [美] 托马斯·弗里德曼 4 一本有故事的IT史,其中有着作者很多自己的观点。
苏菲的世界 [挪] 乔斯坦·贾德 5
此间的少年 江南 5 最爱的小说之一,无需多谈
刽子手世家 (法)勒谢尔博尼埃 5 描述了法国大革命前后一个以刽子手为职业的家族的起落,不太了解起历史,但以小说的角度来看,深度,故事都有了
读大学,究竟读什么 覃彪喜 3 推荐对于自己大学迷茫的人阅读,由于我已读了这本书很久,回忆此书的内容其实有些还是从作者自身所处身份来说过于局限,对一些事物太过绝对,作者不可能给你照明你所走的路,他只是提出了自己的看法,其中有很多看法有可取之处,有一些看法在我现在看来不是很赞成,或者说不是很符合现状的。当然,这也只是我自己的看法
设计心理学 [美]唐纳德·A·诺曼 5

正则表达式在另一篇章介绍。

0 0