利用python3自动在36kr里查找自己感兴趣的内容
最近常常在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里查找自己感兴趣的内容相关推荐
- python程序打包成apk_利用Gradle+Python3自动打包Android APK上传到蒲公英。
利用Gradle+Python3自动打包Android APK上传到蒲公英. 面对每次都要打包一个版本发布给测试,都要手动打包签名~然后登录上传文件.这些繁琐的事情.于是就想到一句很经典的话,(人生苦 ...
- jsp截取字符串前几位_7. Python3轻食丨丛林里的野蛮生长:无处不在的字符串(一)
7. 字符串 7.1 定义与创建 字符串就是Python中的路人脸,它看起来非常普通也是python中最常见的数据类型.但也正是字符串无处不在的原因,让它具有极强的适应能力与包容性:哪儿都有它,它也能 ...
- Android利用AccessibilityService自动获取微信号
前言: 最近遇到一个需求,要求写一个小插件,能够自动在微信的页面弹出一个窗口,展示用户的相关信息(与我们公司有关的信息,方便运营快速了解用户信息). 当时我第一反应是不可能,如果能够在别的app中获取 ...
- 加强版!利用python自动发送邮件
前言 在训练网络的过程中,需要大量的时间,虽然可以预估网络训练完成时间,但蹲点看结果着实有点不太聪明的亚子. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...
- 《果然新鲜》电商项目(44)- 利用Logstash自动同步数据库内容到ES
文章目录 1. 如何实现数据库与ES同步 2.数据库数据录入 3. logstash同步数据库内容到ES 3.1 logstash安装插件 3.1.1 logstash-input-jdbc插件安装 ...
- 如何在html里面搜索代码,怎样在网页里查找关键字
怎样在网页里查找关键字以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 怎样在网页里查找关键字 风狂威,你好,你可以尝试在 ...
- 利用Python3开发一款小工具(界面的设计)
前面在<利用Python3开发一款小工具(引言)>文章中,对我们的需求进行了分析.为了能够让用户运行该工具,因此我们需要一个ui界面,而python中常用的工具就是pyqt,本文将使用py ...
- 利用 Python 自动抓取微博热搜,并定时发送至邮箱
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夜阑卧听风吹雨,铁马冰河入梦来. ...
- php开发工程师名片,PHP编程:利用PHP自动生成印有用户信息的名片
<PHP编程:利用PHP自动生成印有用户信息的名片>要点: 本文介绍了PHP编程:利用PHP自动生成印有用户信息的名片,希望对您有用.如果有疑问,可以联系我们. 前言 PHP教程无论是自己 ...
最新文章
- js时间格式化函数,支持Unix时间戳
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
- 用上这个Python的Docker正式版镜像,你也能成为容器高玩
- 如何拆分PDF,PDF拆分页面的方法
- Python之pandas:将dataframe数据写入到xls表格的多个sheet内(防止写入数据循环覆盖sheet表)
- 数据科学学习课件:实用数据挖掘与人工智能
- echarts4离线使用文档_适合写API接口文档的管理工具有哪些?
- 华为鲲鹏arm架构linux服务器安装mysql教程
- hdu4353 Finding Mine三角形内的点数
- java this关键字表示当前对象,可以访问属性、方法、构造方法
- linux虚拟机lvm扩容,LVM扩容-----给虚拟机添加空间
- python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法...
- nginx ---- 背景介绍及环境准备
- 3.0 Android组件之间的信使Intent
- DID 去中心化数字身份
- html 按钮变成椭圆,HTML 渐变椭圆按钮
- xp 无法关闭计算机,电脑xp系统关不了机,一直显示在正在关机为什么 除了重装,还能怎么办...
- linux cgroup 学习的一些总结
- shimo的学习之MySQL 学习
- JQ使div动态拉伸,width
热门文章
- 笔记整理5----Java语言高级(五--完结)21 字符流与字节流+22 多线程+23 网络编程
- Win10自带电影和电视报错0x800700ea的解决方法
- 统计02:怎样描绘数据
- python读取mt4数据_[转载]如何获取MT4完整的历史数据?
- 中科大凌青老师凸优化课程——目录
- Inno Setup 安装退出代码
- 微信小程序:微信小程序插件使用
- AMD黑苹果遇到的问题-机械键盘输入异常
- 云南大学02届计算机系,云南大学2019年第二届 “东陆青年学者论坛”公告
- Fastboot使用详解