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] 命令行模式阅读博客园的博文相关推荐

  1. python拍七游戏代码_拍七数字游戏 - Johannes-Jensen - 博客园

    最近写作业时,老师留了一道关于拍七数字游戏的题,"拍7游戏"规则是:一堆人围成一圈,开始时,任意指定一人说出数字"1"后,一圈人按顺时针方向,每人按整数由小到大 ...

  2. python爬虫难度排行_【Python爬虫】爬了七天七夜,终于爬出了博客园粉丝数排行榜!...

    [Python爬虫]爬了七天七夜,终于爬出了博客园粉丝数排行榜! 文章发出不到30分钟就被首页下架了,默哀-- 起因 为了督促自己更加积极地写博客,我希望有一个排名系统能让我看到自己的进步.但是博客园 ...

  3. python自动输入账号密码_Python如何基于selenium实现自动登录博客园

    这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...

  4. python读取数据库数据、并保存为docx_Python - 爬取博客园某一目录下的随笔 - 保存为docx...

    1 #coding:utf-8 2 importrequests3 from bs4 importBeautifulSoup4 importMySQLdb5 6 7 defget_html(url): ...

  5. python 自动输入密码登陆程序_Python 使用selenium实现自动登录博客园

    需要做的准备: 本文章是使用Chrome,所以需要Chormedriver.exe,具体的下载过程可以百度查到 Selenium是一种自动化测试工具,能模拟浏览器的行为,所以今天我就模拟一下浏览器登陆 ...

  6. webbrowser中localhost和发布的地址_发布一款android版博客园官方app

    1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...

  7. python防止源码泄露_ctf常见源码泄露 - Lmg66 - 博客园

    前言 在ctf中发现很多源码泄露的题,总结一下,对于网站的搭建要注意删除备份文件,和一些工具的使用如git,svn等等的规范使用,避免备份文件出现在公网 SVN源码泄露 原理 SVN(subversi ...

  8. java编写某计算器控制台程序_计算器 - 进阶的憨狗 - 博客园

    源起 最近在看程杰著作的<大话设计模式>,全书以小菜和大鸟对话的形势,由浅入深的讲解程序的设计思想,影射出一个个设计模式.我之前虽然也使用过一些设计模式,但没有系统的学习.整理.总结,现从 ...

  9. 小甲鱼python课后题答案_小甲鱼Python课后习题-仅学习 - 随笔分类 - 小红帽爱吃大灰狼 - 博客园...

    摘要:1.字典是Python中唯一的映射类型 2.字典包含两个要素:键(key)和值(value)他们是成对出现的,用大括号括起来,多对存在时用逗号隔开. 3.可以用dict()直接创建字典,如dic ...

最新文章

  1. 书评:Mockito Essentials
  2. 使用分页方式读取超大文件的性能试验
  3. 知名网络安全专家访谈记
  4. python 菜鸟-Python IDE
  5. 能套用的tab栏切换
  6. win11使用win10右键菜单的四种办法
  7. 团队管理,领导的“无为”就是最大“有为”
  8. 安装Microsoft Visual Studio 2010 Service Pack 1 ,系统无法找到指定的对象
  9. 复盘:霍夫曼编码平均长度计算方式,信源符号a1-a6概率为:0.1,0.4,0.06,0.1,0.04,0.3,霍夫曼编码平均长度是
  10. java基础学习——Swing图形化用户界面编程
  11. java excel列宽自动换行_Excel单元格中数据如何自动换行以便适应单元格的大小
  12. 2021域名过期会引发哪些问题?说说常见弊端
  13. Mysql ERROR: 1253 解决方法
  14. PHP微信开发素材管理,PHP微信开发包,微信开发SDK
  15. 交互设计师的自我修炼
  16. MVC5_Identity登录原理 - Claims-based认证和OWIN
  17. JS--实现漂浮广告
  18. 每日一课 | range()函数用法
  19. Android App开发学习第十四天:RecyclerView的简单使用
  20. Linux中删除文件夹中所有文件或子文件夹

热门文章

  1. python to_excel新增sheet_Python使用xlrd和xlwt读写Excel的简单用法
  2. LeetCode--single-number复杂度
  3. 怎样实现banner自动播放html,纯CSS3实现banner图片自动轮播效果方式总结
  4. Endnote生成的中英文混排参考文献中“等”与“et al”的处理
  5. 前端程序员书桌上不可缺少的CSS书籍
  6. !doctype html报错h5,【Web前端问题】javascript import 报错
  7. 粉丝提问:有没有人会做彩虹表
  8. c#string倒数第二位插入字符_c#string倒数第二位插入字符_C#利用String类的IndexOf、LastIndexOf、...
  9. 上下div高度动态自适应--另类处理方案
  10. HTML5 拖放、交换位置