python爬虫糗事百科

#coding:utf-8 import urllib2
import re
# 工具类 class Tools(object):
    remove_n = re.compile(r'\n')
    replace_br = re.compile(r'
|
'
) remove_ele = re.compile(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 = 'https://www.qiushibaike.com/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 = re.compile( r'
.*?

(.*?)

.*?Icon">(.*?)
.*?class="content">(.*?)
.*?(.*?).*?(.*?)', 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()

转载于:https://my.oschina.net/u/3682435/blog/1535393

你可能感兴趣的:(爬虫,python,操作系统)