美文网首页
爬取糗事百科

爬取糗事百科

作者: 飞向深空 | 来源:发表于2018-09-22 20:57 被阅读0次
    import urllib
    import requests
    import re
    
    
    class QSBK:
    
        #初始化方法,定义一些变量
        def __init__(self):
            self.pageIndex = 1
            self.user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
            self.headers = {'User-Agent':self.user_agent}
            self.stories = []
            self.enable = False
    
    
        #获取网页代码
        def getPage(self,pageIndex):
            url = 'http://www.qiushibaike.com/hot/page/'+str(pageIndex)
            reponse = requests.get(url,headers = self.headers)
            html = reponse.text
            return html   #连getPageItems
    
        #传入某一页代码,返回本页不带图片的段子列表
        def getPageItems(self,pageIndex):
            pageCode = self.getPage(pageIndex)
            if not pageCode:
                print('页面加载失败....')
                return None
            pattern = re.compile('<div.*?<a.*?<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?-->(.*?)<div class="stats',re.S)
            items = re.findall(pattern,pageCode)
            pageStories = []
    
            for item in items:
                havImg = re.search("img",item[2])
                if not havImg:
                    replaceBR = re.compile('<br/>')
                    text = re.sub(replaceBR,"\n",item[1])
                    pageStories.append([item[0].strip(),text.strip(),item[1].strip()])
            return pageStories   #连getOneStory
    
    
        #加载并提取页面的内容,加入到列表
        def loadPage(self):
            #如果爬的第一页段子少于2个就再怕一页
            if self.enable == True:
                if len(self.stories)<2:
                    #爬新一页
                    pageStories = self.getPageItems(self.pageIndex)
                    #将该页的段子放到全局list中
                    if pageStories:
                        self.stories.append(pageStories)
                        #爬完后页码加一,表示下次读取下一页
                        self.pageIndex += 1
    
    
        #调用该方法,每敲一次就出来个段子
        def getOneStory(self,pageStorys,page):
            for story in pageStorys:
                #等待输入指令
                inputZL = input()
                #每当出入一次回车,判断下是否要加载新页面
                self.loadPage()
                #输入是q则程序终止
                if inputZL == 'q':
                    self.enable = False
    
                    return   #让这函数结束,不执行下面print
                print('第%d页\t发布人:%s\t  段子:%s'%(page,story[0],story[1]))
    
    
        def start(self):
            print('正在读取糗事百科,按回车查看新段子,q退出')
            #是变量变为True,程序可以正常运行
            self.enable = True
            #先加载一页内容
            self.loadPage()
            #局部变量,控制当前读到了第几页
            nowpage = 0
            while self.enable:
                if len(self.stories)>0:
                    #从全局list中获取一页的段子
                    pageStories = self.stories[0]
                    #当前读到的页数加1
                    nowpage += 1
                    #将全局list中第一个元素删除,因为已经取出
    
                    del self.stories[0]
                    #输出该页的段子
                    self.getOneStory(pageStories,nowpage)
    
    if __name__ == '__main__':
        spider = QSBK()
        spider.start()
    
    

    相关文章

      网友评论

          本文标题:爬取糗事百科

          本文链接:https://www.haomeiwen.com/subject/giixoftx.html