python命令行运行模式_[Python] 命令行模式阅读博客园的博文
1 #-*- coding:UTF-8 -*-
2 importrequests3 from lxml importetree4 importsys5 importio6 importos7
8
9 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')10
11
12 classCnBlogs:13 """"14 Auth:reader15 发表地址:https://www.cnblogs.com/reader/p/11487398.html16 作者地址:https://www.cnblogs.com/reader17 """
18 def __init__(self):19 self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}20
21 self.target_domain = "https://www.cnblogs.com"
22 self.page = 1
23 self.lists ={}24
25 defclearscreen(self):26 """根据系统,清屏操作"""
27 #window下的清屏方式
28 os.system("cls")29
30 defset_target_url(self, page):31 if page == 1:32 self.target_url =self.target_domain33 else:34 self.target_url = 'https://www.cnblogs.com/sitehome/p/'+str(page)35
36 defdownload(self, page):37 """下载html页面内容"""
38 self.set_target_url(page)39 response = requests.get(self.target_url, headers=self.headers)40 if response.status_code == 200:41 returnresponse.content42 else:43 print("download fail")44 return ""
45
46 defisascii(self, ch):47 return ch <= u'\u007f'
48
49 defformatByWidth(self, text, width):50 """格式化字符串长度"""
51 count =052 for u intext:53 if notself.isascii(u):54 count += 1
55 return text + " " * (width - count -len(text))56
57 defparse(self, content):58 """解析HTML内容"""
59 html =etree.HTML(content)60 lists = html.xpath('//div[@id="post_list"]//div[@class="post_item_body"]')61
62 delhtml63 k = 1
64 print('+', '--' * 50, '+')65 print('|', str("当前页码:"+str(self.page)).ljust(95), '|')66 print('+', '--' * 50, '+')67 for li inlists:68 title = str(li.xpath('h3/a/text()')[0])69 link = li.xpath('h3/a/@href')[0]70 desc = li.xpath('p')[0].xpath('string(.)')71
72 self.lists[k] ={73 'title': title,74 'desc': desc.strip(),75 'link': link76 }77
78 print('|', k, self.formatByWidth(title, 100-1-len(str(k))), '|')79 k += 1
80 dellists81 print('+', '--' * 50, '+')82
83 defdescopt(self, k):84 """读取详情"""
85 k =int(k)86 if k not inself.lists.keys():87 return
88 self.clearscreen()89 print('+', '--' * 50, '+')90 print('|', self.formatByWidth(self.lists[k]['title'], 100), '|')91 print('+', '--' * 50, '+')92 print('|', self.formatByWidth(self.lists[k]['link'], 100), '|')93 print('+', '--' * 50, '+')94
95 print('|', self.formatByWidth(self.lists[k]['desc'], 100), '|')96
97 print('+', '--' * 50, '+')98 input("输入任意键返回...\r\n")99
100 defreadopt(self):101 """开始阅读操作"""
102 whileTrue:103 self.clearscreen()104 print("\r\n")105 html = self.download(page=self.page)106 self.parse(html)107
108 print("[N]:下一页,[B]:上一页,[H]:首页,[D {num}]:简述, [Q]:返回")109
110 cmd = input("请输入操作编号[N、B、H、D、Q]:")111
112 if cmd == 'Q' or cmd == 'q': #返回
113 break
114 elif cmd == 'N' or cmd == 'n': #下一页
115 self.page += 1
116 elif cmd == 'B' or cmd == 'b': #上一页
117 self.page -= 1
118 if self.page <=0:119 self.page = 1
120 elif cmd == 'H' or cmd == 'h': #首页
121 self.page = 1
122 else:123 cmd = cmd.split(' ')124
125 if len(cmd) != 2:126 continue
127 #读取简述
128 if cmd[0] == 'D' or cmd[0] == 'd':129 self.descopt(cmd[1])130
131 defaboutopt(self):132 self.clearscreen()133 print("博客园地址: https://www.cnblogs.com/reader\r\n")134 input("输入任意键返回...\r\n")135
136 defstart(self):137 self.clearscreen()138 whileTrue:139 print('+', '--'*50, '+')140 print('|', "欢迎使用博客园阅读器(reader 开发)".center(88), '|')141 print('+', '--' * 50, '+')142 print('|', "[1]:开始阅读".center(95), '|')143 print('|', "[2]:关于作者".center(95), '|')144 print('|', "[Q]:退出软件".center(95), '|')145 print('+', '--' * 50, '+')146
147 cmd = input("请输入操作编号[1、2、Q]:")148 if cmd == '1':149 self.readopt()150 elif cmd == '2':151 self.aboutopt()152 elif cmd == 'Q' or cmd == 'q':153 break
154
155 os.system("cls")156
157 print("已退出,欢迎使用!")158
159
160 if __name__ == "__main__":161 obj =CnBlogs()162 obj.start()
python命令行运行模式_[Python] 命令行模式阅读博客园的博文相关推荐
- python拍七游戏代码_拍七数字游戏 - Johannes-Jensen - 博客园
最近写作业时,老师留了一道关于拍七数字游戏的题,"拍7游戏"规则是:一堆人围成一圈,开始时,任意指定一人说出数字"1"后,一圈人按顺时针方向,每人按整数由小到大 ...
- python爬虫难度排行_【Python爬虫】爬了七天七夜,终于爬出了博客园粉丝数排行榜!...
[Python爬虫]爬了七天七夜,终于爬出了博客园粉丝数排行榜! 文章发出不到30分钟就被首页下架了,默哀-- 起因 为了督促自己更加积极地写博客,我希望有一个排名系统能让我看到自己的进步.但是博客园 ...
- python自动输入账号密码_Python如何基于selenium实现自动登录博客园
这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...
- python读取数据库数据、并保存为docx_Python - 爬取博客园某一目录下的随笔 - 保存为docx...
1 #coding:utf-8 2 importrequests3 from bs4 importBeautifulSoup4 importMySQLdb5 6 7 defget_html(url): ...
- python 自动输入密码登陆程序_Python 使用selenium实现自动登录博客园
需要做的准备: 本文章是使用Chrome,所以需要Chormedriver.exe,具体的下载过程可以百度查到 Selenium是一种自动化测试工具,能模拟浏览器的行为,所以今天我就模拟一下浏览器登陆 ...
- webbrowser中localhost和发布的地址_发布一款android版博客园官方app
1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...
- python防止源码泄露_ctf常见源码泄露 - Lmg66 - 博客园
前言 在ctf中发现很多源码泄露的题,总结一下,对于网站的搭建要注意删除备份文件,和一些工具的使用如git,svn等等的规范使用,避免备份文件出现在公网 SVN源码泄露 原理 SVN(subversi ...
- java编写某计算器控制台程序_计算器 - 进阶的憨狗 - 博客园
源起 最近在看程杰著作的<大话设计模式>,全书以小菜和大鸟对话的形势,由浅入深的讲解程序的设计思想,影射出一个个设计模式.我之前虽然也使用过一些设计模式,但没有系统的学习.整理.总结,现从 ...
- 小甲鱼python课后题答案_小甲鱼Python课后习题-仅学习 - 随笔分类 - 小红帽爱吃大灰狼 - 博客园...
摘要:1.字典是Python中唯一的映射类型 2.字典包含两个要素:键(key)和值(value)他们是成对出现的,用大括号括起来,多对存在时用逗号隔开. 3.可以用dict()直接创建字典,如dic ...
最新文章
- 书评:Mockito Essentials
- 使用分页方式读取超大文件的性能试验
- 知名网络安全专家访谈记
- python 菜鸟-Python IDE
- 能套用的tab栏切换
- win11使用win10右键菜单的四种办法
- 团队管理,领导的“无为”就是最大“有为”
- 安装Microsoft Visual Studio 2010 Service Pack 1 ,系统无法找到指定的对象
- 复盘:霍夫曼编码平均长度计算方式,信源符号a1-a6概率为:0.1,0.4,0.06,0.1,0.04,0.3,霍夫曼编码平均长度是
- java基础学习——Swing图形化用户界面编程
- java excel列宽自动换行_Excel单元格中数据如何自动换行以便适应单元格的大小
- 2021域名过期会引发哪些问题?说说常见弊端
- Mysql ERROR: 1253 解决方法
- PHP微信开发素材管理,PHP微信开发包,微信开发SDK
- 交互设计师的自我修炼
- MVC5_Identity登录原理 - Claims-based认证和OWIN
- JS--实现漂浮广告
- 每日一课 | range()函数用法
- Android App开发学习第十四天:RecyclerView的简单使用
- Linux中删除文件夹中所有文件或子文件夹
热门文章
- python to_excel新增sheet_Python使用xlrd和xlwt读写Excel的简单用法
- LeetCode--single-number复杂度
- 怎样实现banner自动播放html,纯CSS3实现banner图片自动轮播效果方式总结
- Endnote生成的中英文混排参考文献中“等”与“et al”的处理
- 前端程序员书桌上不可缺少的CSS书籍
- !doctype html报错h5,【Web前端问题】javascript import 报错
- 粉丝提问:有没有人会做彩虹表
- c#string倒数第二位插入字符_c#string倒数第二位插入字符_C#利用String类的IndexOf、LastIndexOf、...
- 上下div高度动态自适应--另类处理方案
- HTML5 拖放、交换位置