爬取豆瓣TOP250电影详解

news2024/11/18 21:29:00

一.分析网页DOM树结构

1.分析网页结构及简单爬取

豆瓣(Douban)是一个社区网站,创立于2005年3月6日。该网站以书影音起家,提供关于书籍、电影、音乐等作品的信息,其作品描述和评论都是由用户提供(User-Generated Content,简称UGC),是Web 2.0网站中具有特色的一个网站。该网站提供了书影音推荐、线下同城活动、小组话题交流等多种服务功能,致力于帮助都市人群发现生活中有用的事物。

本文主要介绍BeautifulSoup技术爬取豆瓣电影排名前250名的电影信息。第一部分将介绍分析网页DOM树结构。爬取豆瓣的地址为:

  • https://movie.douban.com/top250?format=text

在这里插入图片描述

上图中显示了豆瓣热门的250部电影的信息,包括电影中文名称、英文名称、导演、主演、评分、评价数等信息,接下来需要对其进行DOM树结构分析。HTML网页是以标签对的形式出现,如< html >< /html >、< div >< /div >等,这种标签对呈树形结构显示,通常称为DOM树结构

在得到一个网页之后,我们需要结合浏览器对其进行元素分析。比如豆瓣电影网站,选中第一部电影《肖申克的救赎》,右键鼠标“检查”(Chrome浏览器称为“检查”,其他浏览器可能称为“审查元素”等),如下图2所示。

在这里插入图片描述

显示结果如图3所示,可以发现它是在< div class=”article” >< /div >路径下,由很多个< li >< /li >组成,每一个< li >< /li >分别对应一部电影的信息。其中,电影《肖申克的救赎》HTML中对应内容为:

<li><div class="item">......</div></li>

通过class值为“item”可以定位电影的信息。调用BeautifulSoup扩展包的find_all(attrs={“class”:“item”}) 函数可以获取其信息。

在这里插入图片描述

对应的HTML部分代码如下:

<li><div class="item">
 <div class="pic">
   <em class="">1</em>
   <a href="https://movie.douban.com/subject/1292052/"> 
    <img alt="肖申克的救赎"src="https://img3.doubanio.com/.../p480747492.webp" >
   </a>
 </div>
 <div class="info">...</div>
</div></li>

下面通过Python3代码可以获取电影的信息,调用BeautifulSoup中的find_all()函数获取< div class=’item’ >的信息,其结果如图4所示。

test01.py

# -*- coding:utf-8 -*-
# By:Eastmount CSDN
import urllib.request
import re 
from bs4 import BeautifulSoup

# 爬虫函数
def crawl(url, headers):
    page = urllib.request.Request(url, headers=headers)
    page = urllib.request.urlopen(page)
    contents = page.read()
    #print(contents)
    
    soup = BeautifulSoup(contents, "html.parser")
    print('豆瓣电影250: 序号 \t影片名\t 评分 \t评价人数')
    for tag in soup.find_all(attrs={"class":"item"}):
        content = tag.get_text()
        content = content.replace('\n','')   #删除多余换行
        print(content, '\n')

# 主函数
if __name__ == '__main__':
    url = 'http://movie.douban.com/top250?format=text'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
               AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    crawl(url, headers)

运行结构如图4所示,爬取了豆瓣Top250的第一页电影的信息,包括序号、影片名、导演及主演信息、评分、评价人数等。

在这里插入图片描述

注意:urllib.error.HTTPError: HTTP Error 418
如果直接使用urllib.request.urlopen(url)会提示该错误,这是因为爬虫被拦截,需要模拟浏览器访问,这里可以打开浏览器按下F12,找到对应Headers内容,然后在Python代码中设置User-Agent即可模拟该浏览器请求。

在这里插入图片描述

urlopen()函数:

  • Python2:urllib2.urlopen(url)
  • Python3:urllib.request.urlopen(url)
  • urlopen()函数用于创建一个表示远程url的类文件对象,然后像操作本地文件一样操作这个类文件对象来获取远程数据

read()函数:

  • 调用read()读取网页内容并赋值给contents变量

BeautifulSoup函数:

  • soup = BeautifulSoup(contents, “html.parser”)
  • 调用BeautifulSoup解析所抓取网页源码的DOM树结构

find_all()函数:

  • 调用BeautifulSoup的find_all()函数获取属性class为“item”的所有值,并调用代码content.replace(’\n’,’’)将换行符替换为空值,从而实现删除多余换行,最后循环输出结果。


2.定位节点及网页翻页分析

通过前一部分我们获取了电影的简介信息,但是这些信息是融合在一起的,而在数据分析时,通常需要将某些具有使用价值的信息提取出来,并存储至数组、列表或数据库中,比如电影名称、演员信息、电影评分等特征。

作者简单归纳了两种常见的方法:

  • (1) 文本分析。从获取的电影简介文本信息中提取某些特定的值,通常采用字符串处理方法进行提取。
  • (2) 节点定位。在写爬虫过程中定位相关节点,然后进行爬取所需节点操作,最后赋值给变量或存储到数据库中。

本部分将结合BeautifulSoup技术,采用节点定位方法获取具体的值。点开HTML网页,检查对应的< li >< /li >节点,可以看到该电影的构成情况,再定位节点内容,如< span class=“title” >节点可以获取标题,< div class=“star” >节点可以获取电影评分和评价人数。

在这里插入图片描述

获取节点的核心代码如下,定位class属性为“item”的div布局后,再调用find_all()函数查找class属性为title的标签,并获取第一个值输出,即title[0]。接着调用find()函数爬取评分信息,通过get_text()函数获取内容。

for tag in soup.find_all(attrs={"class":"item"}): 
    title = tag.find_all(attrs={"class":"title"})           #电影名称
    info = tag.find(attrs={"class":"star"}).get_text()      #爬取评分和评论数
    print(title[0])
    print(info.replace('\n',''))
# <span class="title">肖申克的救赎</span>
# 9.72279813人评价

在这里插入图片描述

讲到这里,我们第一页的25部电影信息就爬取成功了,而该网页共10页,每页显示25部电影,如何获取这250部完整的电影信息呢?这就涉及到链接跳转和网站的翻页分析。网站的翻页分析通常有四种方法:

  • 点击下一页分析url网址,分析它们之间的规律,这种方法的网站通常采用GET方法进行传值,而有的网站采用局部刷新技术,翻页后的url仍然不变。
  • 获取“下一页”或页码的超链接,再依次调用urllib2.urlopen(url)函数访问URL并实现网页跳转。
  • 分析网站Networks提交请求的参数,通过Python设置参数实现翻页,常用于POST表单。
  • 采用网页自动操作技术,获取下一页按钮或超链接进行自动点击跳转,如selenium技术中的鼠标点击事件。

本文主要采用第一种分析方法,后面讲述Selenium技术时,会介绍鼠标模拟点击事件操作的跳转方法。

在这里插入图片描述

通过点击图6中的第2页、第3页、第10页,我们可以看到网页URL的变化如下。

第2页URL:https://movie.douban.com/top250?start=25&filter= 
第3页URL:https://movie.douban.com/top250?start=50&filter= 
第10页URL:https://movie.douban.com/top250?start=225&filter=

它是存在一定规律的,top250?start=25表示获取第2页(序号为26到50号)的电影信息;top250?start=50表示获取第3页(序号为51到75号)的电影信息,依次类推,我们写一个循环即可获取完整的250部电影信息。核心代码如下:

i = 0  
while i<10:  
    num = i*25 #每次显示25部 URL序号按25增加  
    url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='  
    crawl(url)  
    i = i + 1

注意:当i初始值为0,num值为0,获取第1页信息;当i增加为1,num值为25,获取第2页信息;当i增加为9,num值为225,获取第10页的信息。

讲到这里,爬取豆瓣网电影信息的DOM树结构分析、网页链接跳转已经分析完成,下一小节是讲解完整的代码。


二.爬取豆瓣电影信息

完整代码为test02.py文件,如下所示。

test02.py

# -*- coding: utf-8 -*-
# By:Eastmount CSDN
import urllib.request
import re 
from bs4 import BeautifulSoup
import codecs

#-------------------------------------爬虫函数-------------------------------------
def crawl(url, headers):
    page = urllib.request.Request(url, headers=headers)
    page = urllib.request.urlopen(page)
    contents = page.read()
    
    soup = BeautifulSoup(contents, "html.parser") 
    infofile.write("")
    print('爬取豆瓣电影250: \n')
    
    for tag in soup.find_all(attrs={"class":"item"}):
        #爬取序号
        num = tag.find('em').get_text()
        print(num)
        infofile.write(num + "\r\n")
        
        #电影名称
        name = tag.find_all(attrs={"class":"title"})
        zwname = name[0].get_text()
        print('[中文名称]', zwname)
        infofile.write("[中文名称]" + zwname + "\r\n")
        
        #网页链接
        url_movie = tag.find(attrs={"class":"hd"}).a
        urls = url_movie.attrs['href']
        print('[网页链接]', urls)
        infofile.write("[网页链接]" + urls + "\r\n")
        
        #爬取评分和评论数
        info = tag.find(attrs={"class":"star"}).get_text()
        info = info.replace('\n',' ')
        info = info.lstrip()
        print('[评分评论]', info)
        
        #获取评语
        info = tag.find(attrs={"class":"inq"})
        if(info): #避免没有影评调用get_text()报错
            content = info.get_text()
            print('[影评]', content)
            infofile.write(u"[影评]" + content + "\r\n")
        print('')
        
#-------------------------------------主函数-------------------------------------
if __name__ == '__main__':
    #存储文件
    infofile = codecs.open("Result_Douban.txt", 'a', 'utf-8')
    
    #消息头
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
               AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}

    #翻页
    i = 0
    while i<10:
        print('页码', (i+1))
        num = i*25 #每次显示25部 URL序号按25增加
        url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='
        crawl(url, headers)
        infofile.write("\r\n\r\n")
        i = i + 1
    infofile.close()

运行结果如图7所示,爬取了电影名称、网页连接、评分评论数和影评等信息。

在这里插入图片描述

并且将爬取的250部电影信息存储到“Result_Douban.txt”文件中,如下图所示。

在这里插入图片描述

在代码中,主函数定义循环依次获取不同页码的URL,然后调用crawl(url)函数对每页的电影信息进行定向爬取。在crawl(url)函数中,通过urlopen()函数访问豆瓣电影网址,然后调用BeautifulSoup函数进行HTML分析,前面第一部分讲解了每部电影都位于< li >< div class=“item” >…< /div >< /li >节点下,故采用如下for循环依次定位到每部电影,然后再进行定向爬取。

for tag in soup.find_all(attrs={"class":"item"}):
    #分别爬取每部电影具体的信息

具体方法如下。

(1) 获取序号
序号对应的HTML源码如图8所示,需要定位到< em class >1< /em >节点,通过find(‘em’)函数获取具体的内容。

在这里插入图片描述

对应的代码如下:

num = tag.find('em').get_text()
print(num)

(2) 获取电影名称
电影名称对应的HTML源码如图9所示,包括class='title’对应中文名称和英文名称,class='other’对应电影其他名称。

在这里插入图片描述

对应的代码如下,因为HTML中包含两个title,即< span class=‘title’ >< /span >,所以使用下面的函数获取两个标题:

  • tag.find_all(attrs={“class”:“title”})

但这里我们仅需要中文标题,则直接通过变量name[0]获取其第一个值,即为中文名称,再调用get_text()函数获取其内容。

name = tag.find_all(attrs={"class":"title"})
zwname = name[0].get_text()
print('[中文名称]', zwname)
infofile.write("[中文名称]" + zwname + "\r\n")

同时,上述代码调用codecs库进行了文件处理,其中文件操作的核心代码如下,打开文件三个参数分别是:文件名、读写方式、编码方式,此处文件名为“Result_Douban.txt”,采用文件写方式(a),编码方式是utf-8。

infofile = codecs.open("Result_Douban.txt", 'a', 'utf-8') #打开文件
infofile.write(num+" "+name+"\r\n") #写文件
infofile.close()                    #关闭文件

3.获取电影链接
电影链接对应的HTML源码如上图9所示,定位到< div class=‘hd’ >节点下的< a >< /a >节点,然后获取属性位href的值,即:attrs[‘href’]。

url_movie = tag.find(attrs={"class":"hd"}).a
urls = url_movie.attrs['href']
print('[网页链接]', urls)

获取评分和内容的方法一样,调用函数即可获取:

  • find(attrs={“class”:“star”}).get_text()

但是存在一个问题,它输出的结果将评分数和评价数放在了一起,如“9.4 783221人评价”,而通常在做分析的时候,我们是将评分数存在一个变量中,评价数存在另一变量中。

这就需要进行简单的文本处理,这里推荐大家使用前面讲述过的正则表达式来处理,将此段代码修改如下,调用re.compile(r’\d+.?\d*’)获取字符串中的数字。第一个数字为电影的分数,第二个数字为评论数。

#爬取评分和评论数
info = tag.find(attrs={"class":"star"}).get_text()
info = info.replace('\n',' ')
info = info.lstrip()
print(info)

mode = re.compile(r'\d+\.?\d*') #正则表达式获取数字
print(mode.findall(info))

i = 0
for n in mode.findall(info):
    if i==0:
        print('[分数]', n)
        infofile.write("[分数]" + n + "\r\n")
    elif i==1:
        print('[评论]', n)
        infofile.write(u"[评论]" + n + "\r\n")
    i = i + 1

获取的结果前后对比如图10所示。

在这里插入图片描述

这样,整个豆瓣250部电影信息就爬取成功了。接下来,我们再继续深入,去到具体的每个网页中,爬取详细信息及更多的评论。同时,作者更推崇的是本文讲解的分析方法,只有知道了具体的方法才能解决具体的问题。


三.链接跳转分析及详情页面爬取

在第二部分我们详细分析了如何爬取豆瓣前250部电影信息,同时爬取了每部电影对应详细页面的超链接。本小节主要结合每部电影的超链接url网站,定位到具体的电影页面,进行深一步的详情页面爬取。这里作者还是采用电影《肖申克的救赎》举例,前面爬取了该电影的超链接地址为:

  • https://movie.douban.com/subject/1292052/

该网页打开如图11所示。

在这里插入图片描述

作者主要分析如何爬取该部电影的导演信息、电影简介信息以及热门影评信息,其中影评信息如图12所示。

在这里插入图片描述

1.爬取详情页面基本信息
下面对详情页面进行DOM树节点分析,其基本信息位于< div class=‘article’ >…< /div >标签下,核心内容位于该节点下的子节点中,即< div id=‘info’ >…< /div >。使用如下代码获取内容:

info = soup.find(attrs={"id":"info"})
print(info.get_text())

在这里插入图片描述

2.爬取详情页面电影简介
同样,通过浏览器审查元素,可以得到如图14所示的电影简介HTML源码,其电影简介位于< div class=‘related-info’ >…< /div >节点下,它包括简短版(short)的简介和隐藏的详细版简介(all_hidden),这里作者通过下列函数获取。代码replace(’\n’,’’).replace(’ ‘,’’)用于过滤所爬取HTML中多余的空格和换行符号。

other = soup.find(attrs={"class":"related-info"}).get_text()
print other.replace('\n','').replace(' ','')  #过滤空格和换行

在这里插入图片描述

3.爬取详情页面电影热门评论信息
热门评论信息位于< div id=‘hot-comments’ >…< /div >节点下,然后获取节点下的多个class属性为“comment-item”的div布局,如下图所示。在使用find()或find_all()函数进行爬取时,需要注意标签属性是class还是id,或是其它,必须与之对应一致,才能正确爬取。

#评论
print('\n评论信息:')
for tag in soup.find_all(attrs={"id":"hot-comments"}):
    for comment in tag.find_all(attrs={"class":"comment-item"}):
        com = comment.find("p").get_text()   #爬取段落p
        print com.replace('\n','').replace(' ','')

在这里插入图片描述

完整代码如下:

test03.py

# -*- coding: utf-8 -*-
# By:Eastmount CSDN
import urllib.request
import re 
from bs4 import BeautifulSoup
import codecs

#-----------------------------------爬取详细信息-------------------------------------
def getInfo(url, headers):
    page = urllib.request.Request(url, headers=headers)
    page = urllib.request.urlopen(page)
    content = page.read()
    soup = BeautifulSoup(content, "html.parser")
    
    #电影简介
    print('电影简介:')
    info = soup.find(attrs={"id":"info"})
    print(info.get_text())
    other = soup.find(attrs={"class":"related-info"}).get_text()
    print(other.replace('\n','').replace(' ',''))
    
    #评论
    print('\n评论信息:')
    for tag in soup.find_all(attrs={"id":"hot-comments"}):
        for comment in tag.find_all(attrs={"class":"comment-item"}):
            com = comment.find("p").get_text()
            print(com.replace('\n','').replace(' ',''))
    print("\n\n\n----------------------------------------------------------------")
            
#-------------------------------------爬虫函数-------------------------------------
def crawl(url, headers):
    page = urllib.request.Request(url, headers=headers)
    page = urllib.request.urlopen(page)
    contents = page.read()
    soup = BeautifulSoup(contents, "html.parser") 
    
    for tag in soup.find_all(attrs={"class":"item"}):
        #爬取序号
        num = tag.find('em').get_text()
        print(num)
        
        #电影名称
        name = tag.find_all(attrs={"class":"title"})
        zwname = name[0].get_text()
        print('[中文名称]', zwname)
        
        #网页链接
        url_movie = tag.find(attrs={"class":"hd"}).a
        urls = url_movie.attrs['href']
        print('[网页链接]', urls)
        
        #爬取评分和评论数
        info = tag.find(attrs={"class":"star"}).get_text()
        info = info.replace('\n',' ')
        info = info.lstrip()
        
        #正则表达式获取数字
        mode = re.compile(r'\d+\.?\d*')
        i = 0
        for n in mode.findall(info):
            if i==0:
                print('[电影分数]', n)
            elif i==1:
                print('[电影评论]', n)
            i = i + 1
        
        #获取评语
        getInfo(urls, headers)
        
#-------------------------------------主函数-------------------------------------
if __name__ == '__main__':
    #消息头
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
               AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}

    #翻页
    i = 0
    while i<10:
        print('页码', (i+1))
        num = i*25 #每次显示25部 URL序号按25增加
        url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='
        crawl(url, headers)
        i = i + 1

其中爬取的《龙猫》电影信息输出如图16所示。

在这里插入图片描述

讲到这里,使用BeautifulSoup技术分析爬取豆瓣电影前250部电影信息的实例已经讲解完毕,但在实际爬取过程中可能由于某些页面不存在会导致爬虫停止,这时需要使用异常语句“try-except-finally”进行处理。

同时,爬取过程中需要结合自己所需数据进行定位节点,存储至本地文件中,也需要结合字符串处理过滤一些多余的空格或换行。


四.总结

在学习网络爬虫之前,读者首先要掌握分析网页节点、审查元素定位标签,甚至是翻页跳转、URL分析等知识,然后才是通过Python、Java或C#实现爬虫的代码。本文作者结合自己多年的网络爬虫开发经验,深入讲解了BeautifulSoup技术网页分析并爬取了豆瓣电影信息,读者可以借用本章的分析方法,结合BeautifulSoup库爬取所需的网页信息,并学会分析网页跳转,尽可能爬取完整的数据集。
 

同时,本章所爬取的内容是存储至TXT文件中的,读者也可以尝试着存储至Excel、CSV、Json文件中,甚至存储至数据库,这将为您后面的数据分析提供强大的数据支撑,数据处理起来更为方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)

专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…

NC 丑数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 把只包含质因…

Linux_Shell三剑客grep,awk,sed-08

三剑客的概述&#xff1a; awk、grep、sed是linux操作文本的三大利器&#xff0c;合称文本三剑客&#xff0c;也是必须掌握的linux命令之一。三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;其中属awk功能最强大&#xff0c;但也最复杂。grep更适合单纯的查找…

英伟达开源 Nemotron-4-4B:小型模型,大能量

前沿科技速递&#x1f680; 在人工智能领域&#xff0c;语言模型已经成为推动自然语言处理&#xff08;NLP&#xff09;进步的关键力量。然而&#xff0c;随着模型规模的不断扩大&#xff0c;训练和部署这些大型语言模型&#xff08;LLM&#xff09;的资源成本也在急剧增加。为…

2024年8月 trueNas 容器端口只能设置大于9000问题解决

前言 这两天在搭建个人nas&#xff0c;想顺便在局域网搭建一个dns服务器&#xff0c;我采用的是jpillora/dnsmasq的docker镜像搭建的&#xff0c;但是遇到一个问题始终无法解决容器端口必须大于9000&#xff0c;而dns使用的端口是53是改不了的&#xff0c;找了很多资料发现有老…

地图相册系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

Transformer 中自注意力机制的 一些细节理解

摘自知乎博主https://www.zhihu.com/question/362131975/answer/2182682685?utm_oi78365163782144 作者&#xff1a;月来客栈 链接&#xff1a;https://www.zhihu.com/question/362131975/answer/2182682685 1. 多头注意力机制原理 1.1 动机 首先让我们先一起来看看作者当…

IP SSL证书快速申请教程

在互联网安全领域中&#xff0c;SSL证书是比较普遍的传输数据加密方式之一。SSL证书通过建立加密通道&#xff0c;确保客户端与服务器之间传输的数据不被第三方窃取或篡改。而大多数SSL证书&#xff0c;如单域名SSL证书、多域名SSL证书以及通配符SSL证书&#xff0c;在申请时必…

颇为实用的现代化开源数据表格GristCore

GristCore&#xff1a;用Grist&#xff0c;让数据自动化&#xff0c;让工作更智能。 - 精选真开源&#xff0c;释放新价值。 概览 Grist-core项目是Grist的心脏&#xff0c;是一个创新的在线数据协作平台&#xff0c;它突破了传统电子表格的局限&#xff0c;引入了先进的自动化…

宋仕强论道之效率与成本的关系

宋仕强论道之效率与成本的关系中说&#xff0c;效率于企业的意义重大&#xff0c;一是技术发展和应用带来效率提高&#xff0c;农耕文明与工业时代分别以铁制农具应用和电气化为标志。在现阶段&#xff0c;人工智能&#xff08;AI&#xff09;是目前最有效的新技术&#xff0c;…

Linux找回root密码,帮助指令

目录 找回root密码 帮助指令 man获得帮助指令 help指令 应用实例 找回root密码 进入开机界面&#xff0c;输入e进入编辑界面。 在指定位置输入init/bin/sh 再输入ctrlx进入单用户模式。 最后输入passwd修改密码。 帮助指令 man获得帮助指令 man ls后可以看到很多指令以…

【leetcode】相交链表-25-1

方法&#xff1a;遍历 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {…

Gene_processing_system-v2.0使用之环境变量配置

Gene_processing_system-v2.0环境变量配置 在D盘路径解压上述文件《Gene_processing_system-v2.0.zip》&#xff0c;解压后&#xff0c;对内置Python3.9环境变量进行配置。操作如下&#xff1a; 环境变量配置 第一步&#xff1a;复制python3.9路径值&#xff0c;复制路径值为…

【MySQL】数据的基本操作(CRUD)

系列文章目录 例如&#xff1a;第一章 数据库基础 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、对数据简单操作新增操作 (create)查询操作(select)模糊查询分页查询修改操作(update)删除操…

C 开源库之cJSON

cJSON简介 CJSON库是一个用于解析和生成JSON数据的C语言库。 它提供了一组函数&#xff0c;使得在C语言中操作JSON数据变得简单而高效。 您可以使用CJSON库来解析从服务器返回的JSON数据&#xff0c;或者将C语言数据结构转换为JSON格式以进行传输。 cJSON 使用 官网地址&…

JAVA同城找搭子同城交友系统小程序源码

&#x1f308;【同城搭子交友系统】—— 遇见你的城市小确幸✨ &#x1f46d; 城市喧嚣中的温暖邂逅 在繁忙的都市生活中&#xff0c;你是否常常感到孤单&#xff0c;渴望有那么几个志同道合的朋友&#xff0c;一起探索这座城市的每一个角落&#xff1f;&#x1f3d9;️ 同城…

【机器学习-监督学习】逻辑斯谛回归

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

【前端 23】用Less优化你的CSS书写体验

用Less优化你的CSS书写体验 Less&#xff08;Leaner Style Sheets&#xff09;是一种CSS预处理器&#xff0c;它扩展了CSS的功能&#xff0c;引入了变量、嵌套规则、混合&#xff08;Mixins&#xff09;、运算等特性&#xff0c;使得CSS编写更加灵活和强大。下面&#xff0c;我…

【虚拟化】KVM命令行安装linux虚拟机

目录 ​一、KVM概述 1.1 KVM是什么 1.2 KVM和QEMU的关系 1.3 kvm相关安装包及其作用 二、安装KVM 三、命令行创建虚拟机并安装CentOS7 四、报错处理 4.1 问题1 4.2 问题2 一、KVM概述 1.1 KVM是什么 KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系…

热门好用骨传导耳机怎么挑选?推荐这五款值得入手的骨传导耳机

近两年来&#xff0c;骨传导运动蓝牙耳机在运动领域内日益流行。与传统耳机相比&#xff0c;它的显著优势是能够保持双耳开放&#xff0c;不会堵塞耳道&#xff0c;消除了入耳式耳机可能引起的不适感。此外还能避免运动时耳内出汗可能导致的各种卫生和健康问题。很多人就问了&a…