200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python爬虫糗事百科

python爬虫糗事百科

时间:2019-01-27 06:42:01

相关推荐

python爬虫糗事百科

#coding:utf-8import urllib2import re# 工具类class Tools(object):remove_n = pile(r'\n')replace_br = pile(r'<br>|<br>')remove_ele = pile(r'<.*?>', re.S)#rs 参数,要进行替换的数据 def replace_rs(self,rs):name = re.sub(self.remove_n, '', rs[0])content = re.sub(self.remove_n, '', rs[2])content = re.sub(self.replace_br, r'\n', content)content = re.sub(self.remove_ele, '', content)dz_tuple = (name, rs[1], content, rs[3], rs[4])# 返回处理后的元组 return dz_tuple#糗事百科爬虫类class QSBK(object):''' 1.根据url地址获取网页源代码 2.从网页源代码中提取想要的数据 3.存储或展示数据 ''' #把爬虫需要的基础设置进行初始化 def __init__(self):#爬虫基础url地址,不包含参数部分 self.baseURL = '/hot/page' #请求头 self.headers = {'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50' }# 创建一个Tools对象,把对象赋值self的tool属性 # 在整个爬虫的过程中,只创建一个Tools工具类的对象 self.tool = Tools()#根据页码获取HTML源代码 def get_page(self,num):#1、根据num拼接完整的URL地址 #str()转化为字符串,int()转换为整数 url = self.baseURL+str(num)#2.创建request对象 request=urllib2.Request(url,headers=self.headers)# 3. 发起请求,接收响应 try:response = urllib2.urlopen(request)except (urllib2.URLError,Exception),e:print '连接糗事百科失败,原因:%s'%e#获取失败,返回None return None else:# 返回页码对应的HTMl源代码 return response.read()#从一段html源代码中获取数据 def get_data(self,html):# 1.准备正则表达式 pattern = pile(r'<div class="author clearfix">.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?class="content">(.*?)</span>.*?<i class="number">(.*?)</i>.*?<i class="number">(.*?)</i>',re.S)# 2.根据正则表达式筛选数据 results = re.findall(pattern, html)# 准备列表,存放处理后的数据 rs_data =[]# 3.处理筛选出的数据 for rs in results:dz_tuple = self.tool.replace_rs(rs)# 把元组放在列表中 rs_data.append(dz_tuple)# 4.返回处理后的数据 return rs_data#对象函数,开始爬虫 def start(self):#1.根据某一页页码,获取该页的HTML源代码 html = self.get_page(1)# 2.如果获取到的html源代码不为None,则从源代码中提取数据 if html == None:return rs_data = self.get_data(html)for rs in rs_data:s = raw_input('敲击回车查看下一条段子,输入Q结束:')if s == 'Q':print '程序结束!'break print '用户名:%s 年龄:%s 好笑数:%s 评论数:%s'%(rs[0],rs[1],rs[3],rs[4])print rs[2]print '\n'if __name__ == '__main__':#创建QSBK对象 qsbk = QSBK()qsbk.start()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。