python学习系列1---爬取糗事百科段子

python学习了大半个月了。前段时间一直在慕课网看廖雪峰老师的python学习入门和进阶,视频地址http://www.imooc.com/learn/317。讲的很好,很通俗易懂,一边讲解还能一边练习。后面开始学习python爬虫相关的知识,看的课程都是来自http://wiki.jikexueyuan.com/project/python-crawler-guide/summarize.html该链接的内容,讲解的十分详细,内容较多,一定要有耐心慢慢看,上面的演习我都是在pycharm上一个个跟着再练一遍的,总觉得动动手才能记得更深刻。然后后面附加了一系列的实战练习,第一个就是爬取糗事百科段子的练习。在楼主代码的基础上以及评论者代码的基础上自己也跟着做出来了,效果也还行,亲测可用。留在这里,记录一下,以便后面可以来看看。。总结一下,菜鸟还是要多多学习,多多练习,多多思考。
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
# @Time : 2018\8\3 0003 20:38 
# @Author : Aries 
# @Site :  
# @File : getstoriesfromQSBK.py 
# @Software: PyCharm
import urllib
import urllib2
from bs4 import BeautifulSoup
class QSBK:
    #初始化方法,定义爬取时所需的变量
    def __init__(self):
        self.pageIndex=1
        self.user_agent='Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
        self.headers = {'User-Agent': self.user_agent}
        #存放读取的故事及相关信息,每一个元素是一页的内容
        self.contents=[]
        #存放程序是否继续运行的变量
        self.enable=False
        #存放页面总共的页数
        self.pageAll=0
    #获取某一页的页面代码
    def getPageCode(self,pageIndex):
            try:
                url = 'http://www.qiushibaike.com/hot/page/' + str(pageIndex)
                request = urllib2.Request(url, headers=self.headers)
                response = urllib2.urlopen(request)
                pageCode = response.read()
                return pageCode
            except urllib2.HTTPError, e:
                if hasattr(e, "code"):
                    print u"连接糗事百科失败,错误原因:", e.code
                    return None
                if hasattr(e, "reason"):
                    print u"连接糗事百科失败,错误原因:", e.reason
                    return None
            #获取某一页不带图片的页面内容
    def getPageContent(self,pageIndex):
            pageCode = self.getPageCode(pageIndex)
            if pageCode:
                soup = BeautifulSoup(pageCode)
                nodes = soup.select('#content-left')
                node = nodes[0]
                contents = []
                # 该页所有发布者
                author = node.select('h2')
                # 该页所有发布内容
                content = node.select('div.content')
                # 该页所有点赞数(好笑)
                stats_vote = node.select('.stats-vote .number')
                # 该页所有评论数
                stats_comments = node.select('.stats-comments .number')
                # 总页数
                if self.pageAll==0:
                    pageall = node.select('span.page-numbers')
                    self.pageAll = int(pageall[len(pageall) - 1].get_text().strip())
                # 存储页面内容
                for i in range(0, len(author)):
                    contents.append(
                        [author[i].get_text().strip(), content[i].get_text().strip(), stats_vote[i].get_text().strip(),
                         stats_comments[i].get_text().strip()])
                return contents
            else:
                print "页面加载失败..."
                return None
     #根据回车,打印该页的一个段子内容
    def getOneStory(self,content):
        if self.pageIndex<=self.pageAll+1:
            #打印一个段子
            item=content
            #等待用户输入
            input=raw_input()
            if input=="Q":
                self.enable=False
                return
            print u"第%d页\t发布人:%s\t发布内容:%s\t点赞数:%s\t评论数:%s\t" % (self.pageIndex-1, item[0], item[1], item[2], item[3])
            #每输入一次回车,判段一下是否需要重新加载页面
            self.loadPage()
        else:
            print "\n已加载全部页面内容,请按Q退出!"
            #等待用户输入
            input=raw_input()
            #判断接收任意键已经按下的结果退出
            if input=="Q":
                self.enable=False
                return

    #加载并提取页面的内容。加入列表中
    def loadPage(self):
        if self.enable==True:
            if len(self.contents)==0:
                pageContent=self.getPageContent(self.pageIndex)
                if pageContent:
                    self.contents = pageContent
                    self.pageIndex += 1
                else:
                    print "页面加载失败..."
                    return
    #开始方法
    def start(self):
        print "正在读取糗事百科,按回车查看新段子,退出请按Q"
        #使变量为true,程序正常运行
        self.enable=True
        #先加载一页内容和总共的页数
        self.loadPage()
        while self.enable:
            if self.contents:
                #传入一个段子
                content=self.contents[0]
                #传入之后删除该段子
                del self.contents[0]
                #打印一个段子,传入一个段子的内容
                self.getOneStory(content)
spider=QSBK()
spider.start()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启管理界面,管理员在寻物启管理界面中查看寻物启种类信息,寻物启描述信息,新增寻物启信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值