简单的python 网络爬虫实现

2016-07-12 10:19:04来源:oschina作者:熊大熊二人点击

最近拉肚子三天了,晚上单位又聚餐,一不小心吃多了点,晚上跑厕所跑的频繁,索性睡不着了,参照网上资料,敲了段python 爬虫代码,第一次学习除了shell 和js 外的脚本语言,无限的坑坑,都说python 的效率是 java 的3倍,由于是新手,跌跌撞撞总算是写了出来,还是比较欣慰的。简单介绍一下python :1、设计哲学:Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。2、用途:(1).运维:数据挖掘。


(2).抓取网页比较多,生成报表,批量删除某种文件等等小事。。。


(3).数据采集,服务器上小工具编写 (4).使用范围广,Linux和Windows、Mac OS等上都能用,也就是平台无关性吧


(5).很多自动化测试工具都支持Python脚本,所以才需要应聘者了解这方面


(6).整理文档,备份,监视服务器


3、常见的python web框架Django: Python Web应用开发框架Flask:一个用Python编写的轻量级Web应用框架Web2py:全栈式Web框架Dpark:Python版的Spark言归正传:写代码第一个坑就是缩进,最近看一些个作者的代码没有缩进简直无法忍受,要是在python中没有缩进,就是违背了本身的语法。第二个坑就是代码调试。好歹都已经解决,下面是我爬了百度贴吧nba 的一个帖子,如下:


__author__='CQC'
#-*-coding:utf-8-*-
#importurllib
importurllib2
importre
#处理页面标签类
classTool:
#去除img标签,7位长空格
removeImg=re.compile('|{7}|')
#删除超链接标签
removeAddr=re.compile('|')
#把换行的标签换为/n
replaceLine=re.compile('|
|
|

')
#将表格制表替换为/t
replaceTD=re.compile('')
#把段落开头换为/n加空两格
replacePara=re.compile('')
#将换行符或双换行符替换为/n
replaceBR=re.compile('
|
')
#将其余标签剔除
removeExtraTag=re.compile('<.*?>')
defreplace(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()将前后多余内容删除
returnx.strip()
#百度贴吧爬虫类
classBDTB:
#初始化,传入基地址,是否只看楼主的参数
def__init__(self,baseUrl,seeLZ):
print'_int_相当于这个累的构造函数'
self.baseURL=baseUrl
self.seeLZ='?see_lz='+str(seeLZ)
self.tool=Tool()
defgetPage(self,pageNum):
print'获取百度贴吧地几页的帖子开始'
try:
url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
request=urllib2.Request(url)
response=urllib2.urlopen(request)
returnresponse.read().decode('utf-8')
excepturllib2.URLError,e:
ifhasattr(e,"reason"):
printu"连接百度贴吧失败.错误原因",e.reason
returnNone
print'获取百度贴吧地几页的帖子结束'
#获取帖子标题
defgetTile(self):
print'获取帖子标题开始'
page=self.getPage(1)
pattern=re.compile('(.*?)',re.S)
result=re.search(pattern,page)
ifresult:
#printresult.group(1)#测试输出
returnresult.group(1).strip()
else:
returnNone
print'获取帖子标题结束'
#提取帖子页数
#获取帖子一共有多少页
defgetPageNum(self):
print'获取帖子页数一共有多少页开始'
page=self.getPage(1)
pattern=re.compile('.*?(.*?)',re.S)
result=re.search(pattern,page)
ifresult:
#printresult.group(1)#测试输出
returnresult.group(1).strip()
else:
returnNone
print'获取帖子页数一共有多少页结束'
defgetContent(self,page):
print'获取正文内容开始'
pattern=re.compile('(.*?)
',re.S)
items=re.findall(pattern,page)
#foriteminitems:
#printitem
#printitems[1]
printself.tool.replace(items[1])
print'获取正文内容结束'
baseURL='http://tieba.baidu.com/p/3138733512'
bdtb=BDTB(baseURL,1)
bdtb.getContent(bdtb.getPage(1))


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台