相关文件

关注小编,私信小编领取哟!
当然别忘了一件三连哟~~

对了大家可以关注小编的公众号哟~~
Python日志

开发环境

Python版本:3.6.4
相关模块:
requests模块;
pyqt5模块;
以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理介绍

首先,找个钓段子的问题,例如:

https://www.zhihu.com/question/64745252/answer/1870194928

就是这种:

获取知乎的回答只需要请求这个接口就行了:

https://www.zhihu.com/node/QuestionAnswerListV2
需要携带的参数也不复杂:

data = {'method': 'next','params': '{"url_token":%s,"page_size":%s,"offset":%s}' % (question_id, size, offset)}

所以我们很快就可以完成一个数据爬取的小脚本了(这是最最最基础的爬虫代码,所以我就不一点点地去讲解啦):

'''知乎段子'''
class zhihuJokesSpider():def __init__(self, question_id, **kwargs):self.question_id = question_idself.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36','Accept-Encoding': 'gzip, deflate'}self.api_url = 'https://www.zhihu.com/node/QuestionAnswerListV2'self.session = requests.Session()self.pointer = 0self.limits = 2000'''开始运行'''def start(self):offset = -1size = 1jokes = []while self.pointer <= self.limits:offset += sizedata = {'method': 'next','params': '{"url_token":%s,"page_size":%s,"offset":%s}' % (self.question_id, size, offset)}response = self.session.post(self.api_url, headers=self.headers, data=data)joke = eval(response.text)['msg'][0].replace('\\', '')joke = re.findall(r'<p>(.*?)</p>', joke)joke_filtered = []for item in joke:if '<br>' in item: item = item.replace('<br>', '')if '<b>' in item: item = item.replace('<b>', '')if '</b>' in item: item = item.replace('</b>', '')if len(item) < 5: continueif 'www.zhihu.com' in item: continuejoke_filtered.append(item)joke = '\n'.join(joke_filtered)print(joke)jokes.append(joke)time.sleep(random.randint(0, 1) + random.random())self.pointer += 1if not os.path.exists(str(self.question_id)):os.mkdir(str(self.question_id))with open(os.path.join(str(self.question_id), 'jokes.pkl'), 'wb') as fp:pickle.dump(jokes, fp)

调用并运行他就ok啦:

if __name__ == '__main__':question_id = '64745252'client = zhihuJokesSpider(question_id)client.start()

接着,我们用PyQt5搞个简单的笑话浏览用的GUI吧:

'''demo'''
class JokeDemo(QWidget):def __init__(self, parent=None, **kwargs):super(JokeDemo, self).__init__(parent)self.all_jokes = self.load()# 定义组件self.setWindowTitle('知乎荤段子 - 彳余大胆')self.setWindowIcon(QIcon('data/icon.jpg'))self.setFixedSize(600, 400)self.label_result = QLabel('随机荤段子:')self.button_generate = QPushButton('随机读取一个段子')self.text_result = QTextEdit()# 布局self.grid = QGridLayout()self.grid.addWidget(self.label_result, 0, 0, 1, 1)self.grid.addWidget(self.button_generate, 0, 9, 1, 1)self.grid.addWidget(self.text_result, 1, 0, 1, 10)self.setLayout(self.grid)# 事件绑定self.button_generate.clicked.connect(self.generate)'''随机读取一个段子'''def generate(self):self.text_result.setText(random.choice(self.all_jokes))'''导入所有段子'''def load(self):root_dir = 'data'all_jokes = []for item in os.listdir(root_dir):if not item.endswith('.pkl'): continuewith open(os.path.join(root_dir, item), 'rb') as fp:joke = pickle.load(fp)all_jokes += jokereturn all_jokes

也没几行代码,就不多说了:

咱们来看看具体的效果吧:
很多小伙伴在学习python的时候总会遇到一些问题和瓶颈,没有方向感,不知道该从哪里入手去提升,对此我整理了一些资料,希望能够去帮助到小伙伴们,可以加Python学习交流裙:773162165

好啦,今天的小游戏就给大家安利到这里啦,有啥不懂的大家可以在下方评论,需要源码的可以找小编领取哟,记得关注小编的公众号哈~

谁还不是一个lsp呢!带大家去知乎用Python搜刮一波荤段子呀~相关推荐

  1. 一个垃圾分类项目带你玩转飞桨(1)

    一个垃圾分类项目带你玩转飞桨(1) 基于PaddleClas实现垃圾分类,导出inference模型并利用PaddleHub Serving进行服务化部署. 更好的体验记得移步AIStudio哟~ 点 ...

  2. 运用HashMap和ArrayList打造一个简单的带文件的控制台学生管理系统(附上类及类方法的思维导图+控制台运行界面截图+源代码)

    文章目录: 一.本文由来 二.适合人群 三.类及类方法思维导图 四.控制台运行界面截图 五.项目源代码链接 六.后记 七.再回首 一.本文由来 今天是2020年1月23日.因为在2019年上半学期Ja ...

  3. ThinkPad平板电脑在定价上还存在的一个问题是

    近日,看到联想生产的ThinkPad平板电脑上市销售,在琢磨其产品功能的同时,发现新功能还不错,但是产品定价中至少有两个问题很让人看不懂,以至于我开始怀疑自己的算术水平. 一.其实是个不错的东西 近日 ...

  4. 好难!打个日志还能打出一个bug,语塞...

    某日中午,收到告警,有一笔订单下单失败了.赶紧去Cat看了下错误信息,如下: Web应用调用订单服务的RPC接口报错了,一看错误很自主的认为这是一个序列化的问题.后面排查下来发现压根就不是,这个错误报 ...

  5. 一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序

    开发制作小程序可以让商家更方便地引流获客.增加线上订单.尤其是今年小程序直播大火,商家有了新的运营私域流量的利器,因此做一个电商带直播功能的小程序是很有用的. 如何开发一个这样的小程序呢?流程如下: ...

  6. 程序员找不到对象是因为还没遇到一个有远见的丈母娘

    当别人在放肆秀恩爱的时候,程序员单身狗们在角落里瑟瑟发抖.别人去网站相亲找到对象,程序员去相亲找到BUG.其实,你找不到对象是因为你还没遇到一个有远见的丈母娘. 都说程序员很难找到对象,就知道整天对着 ...

  7. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  8. 尤雨溪介绍 Vue 3:语法不变、TS 支持很好、2.0 系列还会发一个版本

    此前 Vue 发布了 3.0 的 beta 版本,不久后项目核心开发者尤雨溪公开分享了关于该版本的相关信息. 首先,beta 阶段意味着: 已合并所有计划内的 RFC 已实现所有被合并的 RFC Vu ...

  9. 推荐一个vs自带工具分析代码的复杂度

    VS2012 -> Analyze -> Calculate code metrics feature. 代码度量(Code Metrics)是用来测量专业标准的软件特性. 在某些方面,它 ...

最新文章

  1. PTA数据结构与算法题目集(中文)7-25
  2. oracle 打印SQL
  3. boost::sort模块实现使用最坏情况分布进行扩展排序的排序示例
  4. Lua 语言 快速入门
  5. 查看CentOS版本方法
  6. linux QT 结束当前进程_软件特攻队|为什么 Qt 成为 c++ 界面编程的第一选择?
  7. 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)
  8. mysql php释放内存_php mysqli_free_result()函数释放结果集
  9. 如何建立一个利于SEO的网站
  10. iPhone8已跌至三千元档,迫不及待的入手了一部
  11. R语言入门1:安装R和RStudio
  12. oss读取指定文件夹下所有图片
  13. 华为云计算hcip证书有效期_华为云计算容器HCIP V1.0认证
  14. 检验检测系统管理服务器,检验检测管理平台
  15. RabbitMQ的优势和劣势
  16. Window8专业版免序列号激活工具下载地址
  17. 2013年IT界25个最古怪的面试题
  18. 为Android购买多个改装微信,安卓版微信带来超级重磅更新 微信终于开放账号ID修改功能喽(就是限制略多)...
  19. 副驾驶的意义_副驾驶位置有什么含义?
  20. PHP开发规范——转自ThinkPHP手册

热门文章

  1. 计算机知识音频转换,教你如何从原版音频中轻松提取音乐
  2. oracle删除亿级数据
  3. python是最美的语言阅读答案_语文阅读题练习及答案:拯救世界上最美的语言
  4. 基于API函数的串口通信(方法讲解)
  5. 一个睡五分钟等于六个钟头的方法791173729
  6. 小鸟云虚拟主机打开为什么显示是主机开通成功?
  7. 龙腾传世变态服务器网站,龙腾传世 变态版
  8. 自动驾驶 感知算法面经 1
  9. 多功能智能感应台灯设计(FAQ)
  10. 性能瓶颈定位XMind