最近常常在36kr网站的快讯及资讯/最新里查看自己感兴趣内容的及时信息,由于快讯及资讯/最新里信息更新得比较及时快速,自己也很难一直盯着看,故想着要是写个脚本让其自动在后天挂着每隔5分钟查询一次,有的话就写入txt档中并在控制台打印出来,这样自己有空时就看一眼,感觉就会要方便一下,就是玩玩. 脚本如下,供参考:

#!/user/bin/env python3
#-*- coding:utf-8 -*-import requests
from lxml import etree
from time import sleep
import time
import os
from retrying import retry'''
python           3.6.5
lxml             4.3.3
requests         2.21.0
windows10
'''class Check36kr:def __init__(self):# 存储快讯相关的infoself.shortnews_hrefList       = list()self.shortnews_titleList      = list()self.shortnews_focusInfoDict  = dict()# 存储资讯/最新相关的infoself.info_hrefList            = list()self.info_titleList           = list()self.info_focusInfoDict       = dict()# 保存自脚本启动后的获取的信息self.oldinfoList              = list()# 自己感兴趣内容的关键字, 可自定义self.keywords       = ('微信', '微博', 'QQ', '腾讯', '阿里', '百度', '多闪', '视频', '优酷', '爱奇艺', 'AI', '识别')# 上网相关的infoself.shortnews_url = 'https://36kr.com/newsflashes' # 快讯self.info_url = 'https://36kr.com/information/web_news'    # 资讯/最新self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3833.0 Safari/537.36'}# 新建新资讯收集txtif os.path.exists("C:\\Users\\" + os.getlogin() + "\\Desktop\\新资讯收集.txt") == False:with open("C:\\Users\\" + os.getlogin() + "\\Desktop\\新资讯收集.txt", 'a') as f:f.write('Title' + ' '*65 + 'Link' + ' '*36 + 'Time\n')# 获取快讯的信息, 以字典的形式返回{title, href}def getShortNewsPageContent(self):self.shortnews_hrefList.clear() self.shortnews_titleList.clear()self.shortnews_focusInfoDict.clear()r    = requests.get(self.shortnews_url, headers = self.headers)html = etree.HTML(r.text)self.shortnews_titleList   = html.xpath('//div[1]/div[2]/div/div[1]/div/div[2]/div/a/text()')self.shortnews_hrefList    = html.xpath('//div[1]/div[2]/div/div[1]/div/div[2]/div/a/@href')return dict(map(lambda x,y:[x,y], self.shortnews_titleList,self.shortnews_hrefList))# 获取资讯/最新的信息, 以字典的形式返回{title, href}def getInfoPageContent(self):self.info_hrefList.clear()self.info_titleList.clear()self.info_focusInfoDict.clear()r    = requests.get(self.info_url, headers = self.headers)html = etree.HTML(r.text)          self.info_titleList = html.xpath('//div/div[1]/div/div[2]/div/div[2]/div[2]/p/a/text()')self.info_hrefList  = html.xpath('//div/div[1]/div/div[2]/div/div[2]/div[2]/p/a/@href')# 对标题处理一下for i in range(len(self.info_titleList)):if self.info_titleList[i].find('|') != -1:self.info_titleList[i] = self.info_titleList[i].split('|')[1].strip()return dict(map(lambda x,y:[x,y], self.info_titleList,self.info_hrefList))def isExistsOfKeyword(self, keywords):# 1. 针对快讯的处理for title, href in self.getInfoPageContent().items():for keyword in keywords:if keyword in title:if title not in self.oldinfoList:self.oldinfoList.append(title)self.info_focusInfoDict.update({title: 'https://36kr.com' + href})# 1. 针对资讯/最新的处理for title, href in self.getShortNewsPageContent().items():for keyword in keywords:if keyword in title:if title not in self.oldinfoList:self.oldinfoList.append(title)self.shortnews_focusInfoDict.update({title: 'https://36kr.com' + href})if len(self.shortnews_focusInfoDict) == 0 and len(self.info_focusInfoDict) == 0:return Falseelse:return True@retrydef printInfo(self, isFirst = False): # 读取资讯txt中已保存的title, 主要为了保存当重新run脚本时,如获取的信息在txt已存在,则不再保存fileList = list()if isFirst:path = "C:\\Users\\" + os.getlogin() + "\\Desktop\\新资讯收集.txt"with open(path, 'r') as f:fileList = f.readlines()fileList = fileList[1:]for i in range(len(fileList)):fileList[i] = fileList[i].split('http')[0].strip() if self.isExistsOfKeyword(self.keywords):if len(self.shortnews_focusInfoDict) > 0:for title, href in self.shortnews_focusInfoDict.items():if isFirst:if title not in fileList:self.savedata(title, href)print(title, time.strftime('  %Y-%m-%d %H:%M:%S', time.localtime(time.time())))else:print('已存在', title)else:self.savedata(title, href)print(title, time.strftime('  %Y-%m-%d %H:%M:%S', time.localtime(time.time())))if len(self.info_focusInfoDict) > 0:for title, href in self.info_focusInfoDict.items():if isFirst:if title not in fileList:self.savedata(title, href)print(title, time.strftime('  %Y-%m-%d %H:%M:%S', time.localtime(time.time())))else:print('已存在', title)else:self.savedata(title, href)print(title, time.strftime('  %Y-%m-%d %H:%M:%S', time.localtime(time.time())))def savedata(self, title, href):# title/href都变成长度为60个字符宽度,不足以*填充# 目的是在txt中对齐,方便查看(打开txt记得用notepad打开)def is_Chinese(word):chinese_count = 0length = len(word)for ch in word:if '\u4e00' <= ch <= '\u9fff':chinese_count += 1if chinese_count == len(word):return Trueelse:return Falsetitle_e_length = 0href_e_length  = 0title_length   = 0href_length    = 0specific_char = ('(', ')', '、', ':', ',', '!', '《', '》', '?')for single in title:if is_Chinese(single) == False and single not in specific_char:title_e_length += 1for single in href:if is_Chinese(single) == False and single not in specific_char:href_e_length += 1title_length = title_e_length*1 + (len(title) - title_e_length)*2href_length  = href_e_length*1 + (len(href) - href_e_length)*2if title_length < 70:title = title + ' '*(70-title_length)if href_length < 40:href = href + ' '*(40-href_length)# 保存infowith open("C:\\Users\\" + os.getlogin() + "\\Desktop\\新资讯收集.txt", 'a') as f:release_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))f.write(title)f.write(href)f.write(release_time + '\n')def run(self):sum = 0while True:if sum == 0:self.printInfo(True)else:self.printInfo(False)sum += 1sleep(300)if __name__ == '__main__':check36kr = Check36kr()check36kr.run()  

利用python3自动在36kr里查找自己感兴趣的内容相关推荐

  1. python程序打包成apk_利用Gradle+Python3自动打包Android APK上传到蒲公英。

    利用Gradle+Python3自动打包Android APK上传到蒲公英. 面对每次都要打包一个版本发布给测试,都要手动打包签名~然后登录上传文件.这些繁琐的事情.于是就想到一句很经典的话,(人生苦 ...

  2. jsp截取字符串前几位_7. Python3轻食丨丛林里的野蛮生长:无处不在的字符串(一)

    7. 字符串 7.1 定义与创建 字符串就是Python中的路人脸,它看起来非常普通也是python中最常见的数据类型.但也正是字符串无处不在的原因,让它具有极强的适应能力与包容性:哪儿都有它,它也能 ...

  3. Android利用AccessibilityService自动获取微信号

    前言: 最近遇到一个需求,要求写一个小插件,能够自动在微信的页面弹出一个窗口,展示用户的相关信息(与我们公司有关的信息,方便运营快速了解用户信息). 当时我第一反应是不可能,如果能够在别的app中获取 ...

  4. 加强版!利用python自动发送邮件

    前言 在训练网络的过程中,需要大量的时间,虽然可以预估网络训练完成时间,但蹲点看结果着实有点不太聪明的亚子. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  5. 《果然新鲜》电商项目(44)- 利用Logstash自动同步数据库内容到ES

    文章目录 1. 如何实现数据库与ES同步 2.数据库数据录入 3. logstash同步数据库内容到ES 3.1 logstash安装插件 3.1.1 logstash-input-jdbc插件安装 ...

  6. 如何在html里面搜索代码,怎样在网页里查找关键字

    怎样在网页里查找关键字以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 怎样在网页里查找关键字 风狂威,你好,你可以尝试在 ...

  7. 利用Python3开发一款小工具(界面的设计)

    前面在<利用Python3开发一款小工具(引言)>文章中,对我们的需求进行了分析.为了能够让用户运行该工具,因此我们需要一个ui界面,而python中常用的工具就是pyqt,本文将使用py ...

  8. 利用 Python 自动抓取微博热搜,并定时发送至邮箱

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夜阑卧听风吹雨,铁马冰河入梦来. ...

  9. php开发工程师名片,PHP编程:利用PHP自动生成印有用户信息的名片

    <PHP编程:利用PHP自动生成印有用户信息的名片>要点: 本文介绍了PHP编程:利用PHP自动生成印有用户信息的名片,希望对您有用.如果有疑问,可以联系我们. 前言 PHP教程无论是自己 ...

最新文章

  1. js时间格式化函数,支持Unix时间戳
  2. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
  3. 用上这个Python的Docker正式版镜像,你也能成为容器高玩
  4. 如何拆分PDF,PDF拆分页面的方法
  5. Python之pandas:将dataframe数据写入到xls表格的多个sheet内(防止写入数据循环覆盖sheet表)
  6. 数据科学学习课件:实用数据挖掘与人工智能
  7. echarts4离线使用文档_适合写API接口文档的管理工具有哪些?
  8. 华为鲲鹏arm架构linux服务器安装mysql教程
  9. hdu4353 Finding Mine三角形内的点数
  10. java this关键字表示当前对象,可以访问属性、方法、构造方法
  11. linux虚拟机lvm扩容,LVM扩容-----给虚拟机添加空间
  12. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法...
  13. nginx ---- 背景介绍及环境准备
  14. 3.0 Android组件之间的信使Intent
  15. DID 去中心化数字身份
  16. html 按钮变成椭圆,HTML 渐变椭圆按钮
  17. xp 无法关闭计算机,电脑xp系统关不了机,一直显示在正在关机为什么 除了重装,还能怎么办...
  18. linux cgroup 学习的一些总结
  19. shimo的学习之MySQL 学习
  20. JQ使div动态拉伸,width

热门文章

  1. 笔记整理5----Java语言高级(五--完结)21 字符流与字节流+22 多线程+23 网络编程
  2. Win10自带电影和电视报错0x800700ea的解决方法
  3. 统计02:怎样描绘数据
  4. python读取mt4数据_[转载]如何获取MT4完整的历史数据?
  5. 中科大凌青老师凸优化课程——目录
  6. Inno Setup 安装退出代码
  7. 微信小程序:微信小程序插件使用
  8. AMD黑苹果遇到的问题-机械键盘输入异常
  9. 云南大学02届计算机系,云南大学2019年第二届 “东陆青年学者论坛”公告
  10. Fastboot使用详解