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

2023-11-17

最近常常在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):
        # 存储快讯相关的info
        self.shortnews_hrefList       = list()
        self.shortnews_titleList      = list()
        self.shortnews_focusInfoDict  = dict()
        # 存储资讯/最新相关的info
        self.info_hrefList            = list()
        self.info_titleList           = list()
        self.info_focusInfoDict       = dict()
        # 保存自脚本启动后的获取的信息
        self.oldinfoList              = list()
        # 自己感兴趣内容的关键字, 可自定义
        self.keywords       = ('微信', '微博', 'QQ', '腾讯', '阿里', '百度', '多闪', '视频', '优酷', '爱奇艺', 'AI', '识别')
        
        # 上网相关的info
        self.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'}
        
        # 新建新资讯收集txt
        if 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 False
        else:
            return True
            
    @retry
    def 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 = 0
            length = len(word)
            for ch in word:
                if '\u4e00' <= ch <= '\u9fff':
                    chinese_count += 1
            if chinese_count == len(word):
                return True
            else:
                return False
            
        title_e_length = 0
        href_e_length  = 0
        title_length   = 0
        href_length    = 0
        
        specific_char = ('(', ')', '、', ':', ',', '!', '《', '》', '?')
        for single in title:
            if is_Chinese(single) == False and single not in specific_char:
                title_e_length += 1
        for single in href:
            if is_Chinese(single) == False and single not in specific_char:
                href_e_length += 1
        title_length = title_e_length*1 + (len(title) - title_e_length)*2
        href_length  = href_e_length*1 + (len(href) - href_e_length)*2
        
        if title_length < 70:
            title = title + ' '*(70-title_length)
            
        if href_length < 40:
            href = href + ' '*(40-href_length)
        
        # 保存info
        with 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 = 0
        while True:
            if sum == 0:
                self.printInfo(True)
            else:
                self.printInfo(False)
            sum += 1
            sleep(300)
                
if __name__ == '__main__':
    check36kr = Check36kr()
    check36kr.run()  

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数

随机推荐

  • Spring的工作原理(二)IOC-DI

    目录 Spring的工作原理 二 IOC DI 一 什么是IOC 什么是DI 1 1 IOC Inversion of Control 控制反转 1 2 DI Dependency Injection 依赖注入 二 IOC控制反转基础知识
  • 【Python】ChineseCalendar包简介

    ChineseCalendar 是一个 Python 包 用于获取中国传统日历信息 这个包提供了中国农历 二十四节气 传统节日 黄历等信息 你可以使用以下命令来安装这个包 pip install ChineseCalendar 安装完成后
  • iOS开发 将html加载到页面上

    记得要引入头文件 import WebKit WebKit h weakself myWebView WKWebView alloc initWithFrame CGRectMake 0 206 weakself view com widt
  • stm32入门自学笔记

    一 二极管 二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件 二极管就是由一个由 P 型半导体和 N 型半导体形成的 PN 结加上相应的电极引线及管壳封装而成的 NPN和PNP型三极管的作用 1 NPN三极管 基极加高电压 集
  • PRBS笔记

    1 概述 PRBS 伪随机二进制序列 也称为伪随机码 通常被用来测试高速信号的信号质量 伪随机 也说明了该码流并不是真正的随机 而是具有特性属性 码流由 多项式 决定 具有重复周期 PRBS具有多种阶数 如PRBS7 PRBS15 PRBS
  • reify:rxjs: timing reifyNode:node_modules/@vue/cli/node_modules——————npm run dev报错-npm初始化错误

    金钱不够 全靠技术 创建vue3的问题总结 reify rxjs timing reifyNode node modules vue cli node modules卡死不动 npm run dev报错 全局安装webpack 总结 rei
  • ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your

    以下是解决问题的过程 没整理 root localhost flush privileges bash flush 未找到命令 root localhost mysql uroot p Enter password Welcome to t
  • Java 获取季度开始时间结束时间,获取日期所在月份,获取所在季度

    根据季度数获取季度的开始时间结束时间 public static Map
  • STM32【复习串口】

    串口复习加深理解笔记 杂谈 USART FLAG TXE发送缓冲区空标志 说明可以往数据寄存器写入数据了 但并不代码数据发送完成了 USART FLAG TC发送完成标志 这个才是代表USART在缓冲区的数据发送完成了 即从机接收到了数据
  • 目标检测 获得的boundingbox 绘制并且保存

    可能我是读了一个假的研究生 这么简单的弄了3个小时 本来打算用现成的 可是一直保存不了 后面没办法自己写了一个 其中 VOC BBOX LABEL NAMES是list数组 保存对应的标签名 如果类别多的话可以用循环来写 我写在第二个代码上
  • SQL数据库创建失败,提示无法创建列出的某些文件名

    在学习SQL的时候出现了很多低级错误 如下 use master CREATE DATABASE SQL2012Db ON PRIMARY NAME Sql2012Data FILENAME E Program Files Microsof
  • Android总结之链式调用(方法链)

    前言 最近在学习总结Android属性动画的时候 发现Android的属性动画设计采用了链式调用的方式 然后又回顾了一下了以前接触的开源框架Glide也是采用链式调用的方式 还有最近火的一塌糊涂的RxJava也是采用链式调用 为何如此之多的
  • STM32---stm32f103c8t6与stm32f103zet6之间的代码移植转换

    目录 一 将c8t6转换为zet6 1 修改启动文件 2 修改芯片 3 将MD修改为HD 4 下载器的修改 5 修改完成 编译成功 二 将zet6转换为c8t6 一 将c8t6转换为zet6 1 修改启动文件 最终结果如下 2 修改芯片 将
  • RedHat8(RHEL8)超详细安装教程--图文解说版

    目录 一 RHEL8介绍 二 产品地址 三 安装 1 文件 gt 新建虚拟机 快捷键 Ctrl N 2 这里我们选择 自定义 即可 gt 下一步 3 兼容性 保持默认 gt 下一步 4 稍后安装 gt 下一步 5 选择 Linux 操作系统
  • OBJ转GLTF

    obj转gltf的方法较多 这里采用cesium 1 下载cesuim开发包 2 进入cesium根目录 npm下载obj2gltf 没有npm的 自行安装 npm install obj2gltf save 3 将 obj mlt等文件复
  • 数据挖掘学习

    文章目录 绪论 定义 挖掘过程 数据准备 数据探索EDA 数据仓库 空间数据库 时间数据库和时序数据库 流数据 异构数据和遗产数据 数据挖掘的模式 数据准备 数据组成 什么是数据对象 什么是数据属性 数据搜集 数据质量分析 数据类型 考点
  • 国产操作系统产业

    操作系统是计算机的灵魂 目前国外操作系统品牌几乎垄断了巨大的中国市场 其中在桌面端 移动端的市占率分别超过94 75 98 86 根据Gartner的统计数据 2018年中国的操作系统市场容量在189亿以上 其中国外操作系统品牌几乎在中国市
  • Gossip协议

    Gossip协议 一 Gossip协议 1 1 工作原理 1 2 Gossip优点 1 3 Gossip传播方式 1 3 1 Anti Entropy 反熵 1 3 2 Rumor Mongering 谣言传播 1 3 3 结合 1 4 G
  • 初识C语言(二)

    目录 五 字符串 六 转义字符 七 注释 7 1注释的类型 7 1 1单行注释 7 1 2多行注释 7 2注释的使用方法 7 2 1解释代码功能注释 7 2 2提供代码示例注释 7 2 3禁用或屏蔽代码 八 选择语句 8 1if语句 8 1
  • 利用python3自动在36kr里查找自己感兴趣的内容

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