最近拉肚子三天了,晚上单位又聚餐,一不当心吃多了点,晚上跑厕所跑的频繁,索性睡不着了,参照网上资料,敲了段python 爬虫代码,第一次学习除了shell 和js 外的脚本语言,无限的坑坑,都说python 的效率是 java 的3倍,因为是新手,跌跌撞撞总算是写了出来,仍是比较欣慰的。
简单介绍一下python :
一、设计哲学: Python的设计哲学是“优雅”、“明确”、“简单”。所以,Perl语言中“老是有多种方法来作同一件事”的理念在Python开发者中一般是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来作一件事”。
二、用途:(1).运维:数据挖掘。java
(2).抓取网页比较多,生成报表,批量删除某种文件等等小事。。。python
(3).数据采集,服务器上小工具编写
(4).使用范围广,Linux和Windows、Mac OS等上都能用,也就是平台无关性吧web
(5).不少自动化测试工具都支持Python脚本,因此才须要应聘者了解这方面shell
(6).整理文档,备份,监视服务器django
三、常见的python web 框架
Django: Python Web应用开发框架
Flask:一个用Python编写的轻量级Web应用框架
Web2py:全栈式Web框架
Dpark:Python版的Spark
言归正传:写代码第一个坑就是缩进,最近看一些个做者的代码没有缩进简直没法忍受,要是在python中没有缩进,就是违背了自己的语法。第二个坑就是代码调试。好歹都已经解决,下面是我爬了百度贴吧nba 的一个帖子,以下:
flask
__author__ = 'CQC' # -*- coding:utf-8 -*- #import urllib import urllib2 import re #处理页面标签类 class Tool: #去除img标签,7位长空格 removeImg = re.compile('<img.*?>| {7}|') #删除超连接标签 removeAddr = re.compile('<a.*?>|</a>') #把换行的标签换为\n replaceLine = re.compile('<tr>|<div>|</div>|</p>') #将表格制表<td>替换为\t replaceTD = re.compile('<td>') #把段落开头换为\n加空两格 replacePara = re.compile('<p.*?>') #将换行符或双换行符替换为\n replaceBR = re.compile('<br><br>|<br>') #将其他标签剔除 removeExtraTag = re.compile('<.*?>') def replace(self, x): x = re.sub(self.removeImg, "", x) x = re.sub(self.removeAddr, "", x) x = re.sub(self.replaceLine, "\n", x) x = re.sub(self.replaceTD, "\t", x) x = re.sub(self.replacePara, "\n ", x) x = re.sub(self.replaceBR, "\n", x) x = re.sub(self.removeExtraTag, "", x) #strip()将先后多余内容删除 return x.strip() #百度贴吧爬虫类 class BDTB: #初始化,传入基地址,是否只看楼主的参数 def __init__(self, baseUrl, seeLZ): print '_int_ 至关于这个累的构造函数' self.baseURL = baseUrl self.seeLZ = '?see_lz=' + str(seeLZ) self.tool = Tool() def getPage(self, pageNum): print '获取百度贴吧地几页的帖子开始' try: url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum) request = urllib2.Request(url) response = urllib2.urlopen(request) return response.read().decode('utf-8') except urllib2.URLError, e: if hasattr(e, "reason"): print u"链接百度贴吧失败.错误缘由", e.reason return None print '获取百度贴吧地几页的帖子结束' #获取帖子标题 def getTile(self): print '获取帖子标题开始' page = self.getPage(1) pattern = re.compile('<h1 class="core_title_txt.*?>(.*?)</h1>', re.S) result = re.search(pattern, page) if result: #print result.group(1)#测试输出 return result.group(1).strip() else: return None print '获取帖子标题结束' #提取帖子页数 #获取帖子一共有多少页 def getPageNum(self): print '获取帖子页数一共有多少页开始' page = self.getPage(1) pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>', re.S) result = re.search(pattern, page) if result: #print result.group(1)#测试输出 return result.group(1).strip() else: return None print '获取帖子页数一共有多少页结束' def getContent(self, page): print '获取正文内容开始' pattern = re.compile('<div id="post_content_.*?>(.*?)</div>', re.S) items = re.findall(pattern, page) #for item in items: # print item #print items[1] print self.tool.replace(items[1]) print '获取正文内容结束' baseURL = 'http://tieba.baidu.com/p/3138733512' bdtb = BDTB(baseURL, 1) bdtb.getContent(bdtb.getPage(1))