利用BeautifulSoup4爬取猿圈

利用BeautifulSoup4爬取猿圈
import requests
import json
from bs4 import BeautifulSoup

'''
数据源地址: https://www.lmonkey.com/t
爬取的数据内容:文章的标题,url,作者,发布时间
使用工具:requests, bs4
'''


class Yq():
    # 定义请求的url
    url = 'https://www.lmonkey.com/t'

    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
    }

    # 存放爬取到的数据地址
    res_html = None

    # 存储解析后的数据
    varlist = []

    # 初始化方法
    def __init__(self):
        # 发送请求
        result = requests.get(url=self.url, headers=self.headers)

        # 判断请求是否成功,并获取请求的源代码
        if result.status_code == 200:
            print('数据请求成功')
            self.res_html = result.text
            if self.parsedata():
                self.writedata()
        else:
            print('数据请求失败')

    # 解析数据
    def parsedata(self):
        print('正在解析数据...')
        try:
            soup = BeautifulSoup(self.res_html, 'lxml')

            # 获取页面中所有的文章
            divs = soup.find_all('div', class_="list-group-item list-group-item-action p-06")
            for i in divs:
                title = i.find('div', class_="topic_title mb-0 lh-180")
                if title:
                    # split('\n')[0]: 使用\n字符分隔字符串,获取分割后的第一个字符串
                    vardict = {'title': title.text.split('\n')[0],
                               'url': i.a['href'],
                               'author': i.strong.a.text,
                               'date': i.span['title']}
                    self.varlist.append(vardict)
            print('数据解析成功')
            return True
        except:
            print('数据解析时出现异常!')
            return False

    # 写入数据
    def writedata(self):
        if self.varlist != []:
            try:
                with open('./yq.json', 'w', encoding='utf-8', ) as fp:
                    json.dump(self.varlist, fp, ensure_ascii=False)
                print('写入数据成功!')
                return True
            except:
                print('写入数据时发生异常!')
                return False
        else:
            print('无法获取当前解析的数据!')
            return False

# 实例化类
Yq()

Read more

科普文:Java基础系列之【How much faster is Java 17?】

科普文:Java基础系列之【How much faster is Java 17?】

原文: Java 17已经正式上线,不仅带来了诸多新特性和功能增强,更重要的是,在性能方面也有所提升。 这次升级意味着,开发者只需简单更新JDK版本,便能享受到性能上的提升,无需修改项目代码。 OptaPlanner项目的负责人近日对JDK 17、JDK 16和JDK 11进行了性能基准测试对比,以探究Java 17的性能提升是否值得我们去升级。 测试配置与流程详解 1. 硬件环境:选用稳定无干扰的机器,配置为Intel® Xeon® Silver 4116 @ 2.1 GHz,12核24线程,128GB RAM,运行RHEL 8 x86_64系统。 2. JDK选用:分别采用JDK 11、JDK 16和JDK 17进行编译与运行。 3. JVM设置:启用-Xmx3840M,并指定垃圾回收器为G1GC(低延迟)与ParallelGC(高吞吐量)。 4.

By Ne0inhk
科普文:Java基础系列之【梳理 Java 日志框架:Log4j、Log4j2、Logback、java.util.logging (JUL) 等】

科普文:Java基础系列之【梳理 Java 日志框架:Log4j、Log4j2、Logback、java.util.logging (JUL) 等】

概叙 随着互联网和大数据的蓬勃发展,分布式日志系统以及日志分析系统得到了广泛地应用。目前,几乎在所有应用程序中,都会用到各种各样的日志框架来记录程序的运行信息。 鉴于此,作为IT从业人员,非常有必要熟悉主流的日志记录框架。 日志的有无虽然不影响应用程序的运行结果,但是没有日志的应用程序是不完整的,甚至可以说是有缺陷的。即使在有些业务繁忙的系统中,日志框架还可能成为影响整体业务性能的节点,但是日志框架还是整个业务系统不可或缺的重要组成部分。 优雅的日志系统可以记录操作轨迹,监控系统运行状况以及回溯系统故障。 什么是日志技术? 日志技术是一种记录和存储应用程序运行时信息的技术。它可以捕获应用程序的状态、事件、错误和警告等信息,并将其保存到日志文件或其他存储介质中。 日志技术可以帮助开发人员和运维团队了解应用程序的运行情况,进行故障排查、性能优化、安全监控和运营分析等工作。 日志技术的基本概念 1. 日志级别:日志级别用于标识日志的重要性和严重程度。常见的日志级别包括DEBUG、INFO、WARN、ERROR和FATAL等。开发人员可以根据需要选择适当的日志级别来记录不

By Ne0inhk
科普文:软件架构Linux系列之【AMD砍杀Intel的利器:Zen微架构CPU锐龙和霄龙】

科普文:软件架构Linux系列之【AMD砍杀Intel的利器:Zen微架构CPU锐龙和霄龙】

概叙 前面提到并发问题的根源就是cpu太快,计算机其他模块远远跟不上cpu的速度。所以就有了cpu的三级缓存,这也导致了cpu和内存的数据一致性问题。 为了让cpu缓存更多的指令和数据,AMD EPYC  霄龙处理器:引入3D缓存,直接将三级缓存容量扩展到1152MB! 正好,我们来看看Zen微架构CPU锐龙和霄龙。 Zen架构 ‌Zen架构是AMD开发的一种微处理器架构,首次推出于2017年,标志着AMD在高性能处理器市场的强势回归。‌ 该架构基于14nm工艺制造,引入了全新的“[Ryzen”品牌,旗下的锐龙7 1800X和锐龙5 1600X在消费市场上取得了成功,而基于Zen架构的EPYC处理器也开始在服务器市场上获得青睐。‌ Zen架构的推出带来了显著的性能提升,每个时钟周期的指令集提高了40%,现代化的设计和多线程技术使其能够与英特尔的产品竞争。在此基础上,AMD不断进行优化和改进,推出了Zen+和Zen 2架构,分别在2018年和2019年发布。Zen+采用了12nm工艺,进一步优化了功耗和频率,而Zen 2则采用了7nm工艺,带来了更高的性能和更低的功耗。

By Ne0inhk
科普文:软件架构之Linux系列【操作系统基本概念】

科普文:软件架构之Linux系列【操作系统基本概念】

1 操作系统的基本概念 1.1 操作系统的概念 计算机系统自下而上可大致分为4部分:硬件、操作系统、应用程序和用户。 而操作系统管理各种计算机硬件,为应用程序提供基础,并充当计算机硬件与用户之间的中介。 在计算机系统的运行过程中,操作系统提供了正确使用这些资源的方法。 综上所述,**操作系统(Operating System, OS):**是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织、调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的软件集合;它是计算机系统中最基本的系统软件。 1.2 操作系统的特征 操作系统的基本特征包括**并发、共享、虚拟和异步。**这些概念对理解和掌握操作系统的核心至关重要。 并发(Concurrence) 并发是指两个或多个时间在同一时间间隔内发生。操作系统的并发性则是指计算机系统中同时存在多个运行的程序,因此具有处理和调度多个程序同时执行的能力。在操作系统中,引入进程的目的就是为了使程序能并发执行。 注意同一时间间隔(并发)和同一时刻(并行)的区别。 在多道程序环境下,一段时间内,宏观上有多道程序在同时执

By Ne0inhk