python2.7爬取糗事百科

本教程介绍了一个简单的Python脚本,该脚本能够从糗事百科网站爬取热门段子,过滤掉包含图片的内容,并展示每条段子的作者、点赞数及具体内容。

爬取糗事百科上的段子,实现按一次回车,读取一条段子(过滤带有图片的段子),显示段子的发布人,点赞数和内容。

如图:
爬取结果


#!usr/bin/python2.7
# --*--coding:utf-8--*--
__author__ = '风凉zz'
import urllib
import urllib2
import re

class QSBK:
    def __init__(self):
        self.pageIndex = 1
        self.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
        self.referer = 'https://www.qiushibaike.com/hot/'
        self.headers = {'User-Agent': self.user_agent, 'Referer': self.referer}  # 初始化headers
        self.stories = []  # 存放段子的列表,每一个元素表示一页的段子
        self.enable = False  # 存放程序是否继续运行的变量

    def getPageCode(self,pageIndex):  # 获取第pageIndex页的html代码
        url = 'https://www.qiushibaike.com/hot/page/' + str(pageIndex)
        try:
            request = urllib2.Request(url, headers=self.headers)
            response = urllib2.urlopen(request)
            pagecode = response.read().decode('utf-8')
            return pagecode
        except urllib2.URLError, e:
            print u'连接糗事百科失败!'
            if hasattr(e, 'code'):
                print u'错误代码:', e.code
            if hasattr(e, 'reason'):
                print u'错误原因:', e.reason

    def getPageStories(self,pageIndex):  # 获取pageIndex页中所有不带图片的段子列表
        pagecode = self.getPageCode(pageIndex)
        if not pagecode:
            print '页面加载失败!'
            return None
        pattern = re.compile('<div .*?author clearfix">.*?<h2>(.*?)</h2>'
                             '.*?<div.*?content">.*?<span>(.*?)</span>'
                             '(.*?)stats-vote">'
                             '.*?number">(.*?)</i>', re.S)
        items = re.findall(pattern, pagecode)  # items结构:[(...,...,...,...)第一个段子......(...,...,...,...)第n个段子]
        pagestories = []
        for item in items:
            haveimg = re.search('img', item[2])
            if not haveimg:
                content = re.sub('<br/>', '\n', item[1])  # 将</br>替换成换行
                pagestories.append([item[0].strip(), content.strip(), item[3].strip()])
                # Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
                # item[0]发布者,item[1]内容,item[3]点赞数
        return pagestories  # 返回pageIndex页中所有不带图片的段子列表

    def loadPage(self):
        if self.enable == True:
            if len(self.stories) < 2:  # stories列表中未看段子页数少于2时
                pagestories = self.getPageStories(self.pageIndex)  # 获取pagaIndex页的所有不含图段子
                if pagestories:
                    self.stories.append(pagestories)  # 将pageIndex页的段子放入stories列表中
                    self.pageIndex += 1  # 页面数+1

    def getOneStory(self, pageIndex):  # 从pageIndex页中一个一个读取段子
        for story in self.getPageStories(pageIndex):  # 遍历pageIndex页中所有段子
            input = raw_input()  # 读取输入
            self.loadPage()
            if input == 'q':
                self.enable = False
                return None
            print u'第%d页\t' % (pageIndex),
            print u'发布人:%s\t' % (story[0]),
            print u'赞:%s\n' % (story[2]),
            print '%s' % (story[1])

    def start(self):
        print '正在读取糗事百科...'
        print '回车查看新段子/q退出'
        self.enable = True  # enable为True,使程序正常运行
        self.loadPage()
        nowpage = 1  # 当前页数
        while self.enable:
            if len(self.stories) > 0:  # 如果stories列表中还有段子
                pagestories = self.stories[0]  # 从storiies列表中取出第一页的段子
                del self.stories[0]  # 将第一页删除
                self.getOneStory(nowpage)  # 从当前页中一个一个读取段子
                nowpage += 1  # 当前页+1


spider = QSBK()
spider.start()

注:写正则表达式要注意html结束和开始的两个标签之间用. * ?,因为这里会解析为空格,不用. * ?程序会一直跑。


参考崔庆才老师博客

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值