'''
按以下思路写出程序:
1、面向对象(声明类,创建对象)
2、类中有哪些函数?
初始化函数__init__()
需要初始化哪些数据?
第一次请求的页码1
一个空列表all_page_list,用于保存每一页数据的小列表
是否正在查看段子的变量enable(布尔型,正在查看为True,否则为False,初始值应为False)
开始爬取的函数start_spider()
在该函数内调用lazy_load_data()先加载一页数据
记录当前展示的第几页的变量current_page
把是否正在查看的变量设置为True,因为此时在查看段子
判断__init__()函数内的列表all_page_list是否大于0
如果大于0取出第1个进行展示,需要调用展示数据的函数show_content()
展示完毕后让current_page+1
将已经展示完的数据从all_page_list内删除,方便后续的预加载数据
预加载数据的函数lazy_load_data()
判断__init__()函数内列表的长度是否小于2(程序第1次执行时是小于2的)
小于2时说明不够两页,此时调用请求网页源代码的函数get_page_code()
请求到网页源代码后调用get_content_by_html()提取段子内容
把提取到的段子内容存入__init__()函数的列表内
获取网页源代码的函数get_page_code()
此函数根据传入的面码请求网页源代码并在结尾返回
提取段子内容的函数get_content_by_html()
根据传入的网页源代码参数提取需要的内容(用户昵称、段子内容)
提取成功后放入一个局部列表内,最后返回这个列表
展示段子内容的函数show_content()
只展示2个数据,每按一次回车键展示一个段子内容
输入Q键并按回车退出程序
'''
根据思路写出如下代码
import requests
import re
class qiushibaike(object):
def __init__(self):
self.page = 1
self.enble = False
self.all_page_list=[]
self.qian=[]
def get_page_code(self): #请求网页源代码函数
url = 'https://www.qiushibaike.com' + '/8hr/page/' + str(self.page) + '/'
r = requests.get(url).text
return r
def get_content_by_html(self): #提取段子内容
r = self.get_page_code()
pat = re.compile(r'<div class="content">\n<span>\n\n\n(.*?)</span>', re.S)
self.ree = re.findall(pat,r)
return self.ree
def start_spider(self): #开始爬取
if self.enble ==True:
pass
else:
pass
self.lazy_load_data()
if len(self.all_page_list) > 0:
self.get_page_code()
self.get_content_by_html()
self.qian = self.all_page_list[0]
self.page = self.page +1
self.all_page_list = []
else:
pass
def lazy_load_data(self): #预加载函数
if len(self.all_page_list)<2:
self.get_page_code()
self.get_content_by_html()
for x in self.ree:
self.all_page_list.append(x)
def show_content(self): #展示数据函数 只展示2个数据,每按一次回车键展示一个段子内容输入Q键并按回车退出程序
pizhu = self.get_content_by_html()
if self.page<=1:
print('第一条:')
self.start_spider()
print(pizhu[0])
else:
print('下一条数据:')
self.lazy_load_data()
print(pizhu)
print('上一条数据:')
print(self.qian)
self.qian = []
self.start_spider()
my = qiushibaike()
while True:
q = input('Enter text (or Enter to q):')
if my.page <13:
if q=='q':
print('退出系统')
break
else:
my.show_content()
else:
break