谁还不是一个lsp呢!带大家去知乎用Python搜刮一波荤段子呀~
相关文件
关注小编,私信小编领取哟!
当然别忘了一件三连哟~~
对了大家可以关注小编的公众号哟~~
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) 基于PaddleClas实现垃圾分类,导出inference模型并利用PaddleHub Serving进行服务化部署. 更好的体验记得移步AIStudio哟~ 点 ...
- 运用HashMap和ArrayList打造一个简单的带文件的控制台学生管理系统(附上类及类方法的思维导图+控制台运行界面截图+源代码)
文章目录: 一.本文由来 二.适合人群 三.类及类方法思维导图 四.控制台运行界面截图 五.项目源代码链接 六.后记 七.再回首 一.本文由来 今天是2020年1月23日.因为在2019年上半学期Ja ...
- ThinkPad平板电脑在定价上还存在的一个问题是
近日,看到联想生产的ThinkPad平板电脑上市销售,在琢磨其产品功能的同时,发现新功能还不错,但是产品定价中至少有两个问题很让人看不懂,以至于我开始怀疑自己的算术水平. 一.其实是个不错的东西 近日 ...
- 好难!打个日志还能打出一个bug,语塞...
某日中午,收到告警,有一笔订单下单失败了.赶紧去Cat看了下错误信息,如下: Web应用调用订单服务的RPC接口报错了,一看错误很自主的认为这是一个序列化的问题.后面排查下来发现压根就不是,这个错误报 ...
- 一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序
开发制作小程序可以让商家更方便地引流获客.增加线上订单.尤其是今年小程序直播大火,商家有了新的运营私域流量的利器,因此做一个电商带直播功能的小程序是很有用的. 如何开发一个这样的小程序呢?流程如下: ...
- 程序员找不到对象是因为还没遇到一个有远见的丈母娘
当别人在放肆秀恩爱的时候,程序员单身狗们在角落里瑟瑟发抖.别人去网站相亲找到对象,程序员去相亲找到BUG.其实,你找不到对象是因为你还没遇到一个有远见的丈母娘. 都说程序员很难找到对象,就知道整天对着 ...
- Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写
测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...
- 尤雨溪介绍 Vue 3:语法不变、TS 支持很好、2.0 系列还会发一个版本
此前 Vue 发布了 3.0 的 beta 版本,不久后项目核心开发者尤雨溪公开分享了关于该版本的相关信息. 首先,beta 阶段意味着: 已合并所有计划内的 RFC 已实现所有被合并的 RFC Vu ...
- 推荐一个vs自带工具分析代码的复杂度
VS2012 -> Analyze -> Calculate code metrics feature. 代码度量(Code Metrics)是用来测量专业标准的软件特性. 在某些方面,它 ...
最新文章
- PTA数据结构与算法题目集(中文)7-25
- oracle 打印SQL
- boost::sort模块实现使用最坏情况分布进行扩展排序的排序示例
- Lua 语言 快速入门
- 查看CentOS版本方法
- linux QT 结束当前进程_软件特攻队|为什么 Qt 成为 c++ 界面编程的第一选择?
- 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)
- mysql php释放内存_php mysqli_free_result()函数释放结果集
- 如何建立一个利于SEO的网站
- iPhone8已跌至三千元档,迫不及待的入手了一部
- R语言入门1:安装R和RStudio
- oss读取指定文件夹下所有图片
- 华为云计算hcip证书有效期_华为云计算容器HCIP V1.0认证
- 检验检测系统管理服务器,检验检测管理平台
- RabbitMQ的优势和劣势
- Window8专业版免序列号激活工具下载地址
- 2013年IT界25个最古怪的面试题
- 为Android购买多个改装微信,安卓版微信带来超级重磅更新 微信终于开放账号ID修改功能喽(就是限制略多)...
- 副驾驶的意义_副驾驶位置有什么含义?
- PHP开发规范——转自ThinkPHP手册