大模型赋能:爬虫技术的全新革命

news2024/11/29 12:48:41

大模型加持下的爬虫技术革新:从BS4到提示工程的飞跃
在爬虫技术的演进历程中,内容解析一直是一个核心环节。传统的爬虫技术,如使用BeautifulSoup(BS4)等工具,需要逐个解析网页内容,通过XPath或CSS选择器等方式定位并提取所需信息。然而,随着人工智能技术的快速发展,特别是大模型的崛起,内容解析的方式正在发生深刻变革。本文将重点探讨大模型加持下的爬虫技术,对比传统方法与新型提示工程在内容解析上的差异,并给出相应的示例代码。

一、传统爬虫内容解析方法:BS4与XPath

在过去,爬虫开发者通常使用BS4等库来解析网页内容。BS4提供了丰富的API,使得开发者能够方便地通过XPath或CSS选择器定位到页面中的特定元素,并提取出所需的信息。例如,要解析一个页面的标题和段落内容,可以使用类似以下的代码:

from bs4 import BeautifulSoup  
import requests  
  
# 发送请求获取页面内容  
response = requests.get('http://example.com')  
soup = BeautifulSoup(response.text, 'html.parser')  
  
# 使用XPath语法解析标题  
title = soup.select_one('title').text  
  
# 使用XPath语法解析段落  
paragraphs = soup.select('p')  
for paragraph in paragraphs:  
    print(paragraph.text)

这种方法的优点是直观易懂,开发者可以通过阅读HTML结构来编写XPath或CSS选择器。然而,它也存在一些明显的缺点:首先,对于复杂的页面结构,编写准确的选择器可能是一项繁琐且容易出错的任务;其次,当页面结构发生变化时,选择器可能需要重新编写,导致维护成本增加;最后,这种方法无法充分利用网页中的语义信息,对于某些复杂的内容解析任务可能效果不佳。

二、大模型加持下的内容解析:提示工程的崛起

随着大模型技术的发展,内容解析的方式发生了革命性的变化。现在,我们可以将网页的源码直接输入给大模型,并通过提示工程让模型自动抽取标题、正文等信息,同时去除多余的HTML标记。这种方法不仅简化了开发流程,还提高了内容解析的准确性和效率。
以下是一个简单的示例,展示如何使用大模型进行内容解析:

import requests  
from transformers import pipeline  
  
# 加载预训练的大模型  
model = pipeline("text-extraction", model="your-large-model")  
  
# 发送请求获取页面内容  
response = requests.get('http://example.com')  
html_content = response.text  
  
# 将页面源码输入给大模型进行内容解析  
extracted_info = model("抽取给定内容中的标题和正文:" + html_content)  
  
# 提取标题和正文等信息  
title = extracted_info['title']  
text = extracted_info['text']  
  
# 打印解析结果  
print("Title:", title)  
print("Text:", text)

在这个示例中,我们使用了Hugging Face的Transformers库来加载预训练的大模型。通过将页面源码输入给模型,并指定相应的提示(如"提取标题"和"提取正文"),模型能够自动抽取出所需的信息,并去除多余的HTML标记。这种方法不仅简化了代码量,还提高了内容解析的准确性和效率。

三、两种方法的优劣分析

传统爬虫内容解析方法(如BS4+XPath)与大使用大模型(如当前的ChatGLM-3)结合提示工程(Prompt Engineering)来实现页面内容的抽取方法各有优劣。传统方法直观易懂,开发者可以通过阅读HTML结构来编写选择器。然而,它对于复杂页面结构的处理能力有限,且维护成本较高。相比之下,大模型方法能够自动抽取内容并去除多余标记,提高了准确性和效率。但是,它依赖于预训练的大模型,需要消耗更多的计算资源,并且对于某些特定任务可能需要定制化的模型训练。
传统方法(如bs4或XPath)的优势和劣势:
优势:

  1. 精确性:传统方法可以精确地定位到HTML文档中的特定元素。
  2. 性能:通常比使用大模型更快,因为它们直接操作DOM结构。
  3. 可预测性:结果更加可预测,因为它们是基于固定的规则和模式。

劣势:

  1. 灵活性:当页面结构发生变化时,需要更新XPath或bs4的选择器。
  2. 复杂性:对于复杂的HTML结构,编写和维护选择器可能变得困难。
  3. 扩展性:在处理大量不同结构的网页时,可能需要为每个页面编写不同的选择器。

使用大模型(如ChatGLM-3)结合提示工程的优势和劣势:
优势:

  1. 灵活性:能够处理各种格式的文本和数据,不依赖于固定的页面结构。
  2. 适应性:当页面结构发生变化时,通常不需要修改提示词。
  3. 智能性:能够理解更复杂的指令和上下文。

劣势:

  1. 性能:大模型通常比传统方法更慢,尤其是在处理大量数据时。
  2. 精确性:可能不如传统方法精确,因为它们是基于自然语言理解的。
  3. 成本:运行大模型可能需要更多的计算资源。
3.1 传统方法(BeautifulSoup)示例:
from bs4 import BeautifulSoup  
  
html_doc = """  
<html>  
<head>  
    <title>Example Page</title>  
</head>  
<body>  
    <p class="title">This is a title</p>  
    <p class="content">This is the content.</p>  
</body>  
</html>  
"""  
  
soup = BeautifulSoup(html_doc, 'html.parser')  
title = soup.find('p', {'class': 'title'}).text  
content = soup.find('p', {'class': 'content'}).text  
print(f"Title: {title}")  
print(f"Content: {content}")
3.2 XPath示例:假设你正在使用lxml库来解析HTML。
from lxml import html  
  
html_content = """  
<html>  
<head>  
    <title>Example Page</title>  
</head>  
<body>  
    <p class="title">This is a title</p>  
    <p class="content">This is the content.</p>  
</body>  
</html>  
"""  
  
tree = html.fromstring(html_content)  
title = tree.xpath('//p[@class="title"]/text()')[0]  
content = tree.xpath('//p[@class="content"]/text()')[0]  
print(f"Title: {title}")  
print(f"Content: {content}")
3.3 使用ChatGLM-3的提示词示例:

假设你已经有了HTML内容,并想通过ChatGLM-3来提取标题和内容。提示词:

请从以下HTML内容中提取出标题和内容的文本:  
<html>  
<head>  
    <title>Example Page</title>  
</head>  
<body>  
    <p class="title">This is a title</p>  
    <p class="content">This is the content.</p>  
</body>  
</html>  
标题是:  
内容是:

注意:在实际应用中,你需要将上述HTML内容粘贴到ChatGLM-3的输入框中,并附上提示词。然后,ChatGLM-3将尝试根据提示词从HTML中提取所需的信息。

四、爬虫常见问题及解决方案

4.1. IP被封问题

当爬虫发送的请求过于频繁或数量过大时,可能会导致IP被封禁。解决这个问题的一种方法是使用IP池,即维护一个包含多个可用IP的列表,当某个IP被封禁时,切换到另一个IP继续爬取。
在爬虫任务中,IP被封是一个常见问题。这主要是因为爬虫在短时间内向目标网站发送了大量的请求,这种异常流量模式可能触发网站的安全机制,从而导致IP地址被封禁。封禁可能是临时的,也可能是永久的,具体取决于目标网站的安全策略和反爬虫机制。常见的几种解决方法:

  1. 设置请求延时:通过增加爬虫请求之间的时间间隔,减少单位时间内发出的请求数量,以降低被封禁的风险。
  2. 使用代理IP:通过代理服务器发送请求,可以隐藏真实IP地址,并且可以在代理IP被封后更换新的代理。

image.png

  1. 使用Web服务API:如果目标网站提供API接口,最好通过API进行数据抓取,这样通常不会触发反爬虫机制。
  2. 分布式爬虫:将爬虫程序部署在多个服务器上,分散请求压力,减少单个IP的请求频率。
  3. 伪装User-Agent和Referer:模拟浏览器行为,设置随机的User-Agent和Referer,以避免被识别为爬虫。
  4. 处理异常和重试:编写异常处理逻辑,当检测到IP被封时,可以暂停爬虫一段时间后再重试。
  5. 使用专门的爬虫工具或库:如Scrapy、Selenium等,这些工具通常内置了一些反反爬虫的策略。

在Python中,可以使用concurrent.futures模块中的ThreadPoolExecutor来创建一个线程池,用于并发执行爬虫任务。以下是一个简单的示例:

import concurrent.futures  
import requests  
import time  
  
# 假设这是你的爬虫函数  
def crawl_page(url):  
    proxies = get_proxy()  # 假设这个函数用于获取一个有效的代理IP  
    headers = {'User-Agent': 'Mozilla/5.0'}  
    response = requests.get(url, proxies=proxies, headers=headers)  
    # 处理响应...  
    return response.text  
  
# 假设这个函数用于获取代理IP,此处为示例,需要根据实际情况实现  
def get_proxy():  
    # 返回代理服务器的信息,例如:{'http': 'http://代理服务器地址:端口', 'https': 'https://代理服务器地址:端口'}  
    pass  
  
# 要抓取的URL列表  
urls = ['http://example.com/page1', 'http://example.com/page2', ...]  
  
# 创建一个线程池,线程数为5  
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:  
    # 使用线程池并发执行爬虫任务  
    future_to_url = {executor.submit(crawl_page, url): url for url in urls}  
    for future in concurrent.futures.as_completed(future_to_url):  
        url = future_to_url[future]  
        try:  
            # 获取爬虫结果  
            data = future.result()  
        except Exception as exc:  
            print(f'{url} generated an exception: {exc}')  
        else:  
            print(f'{url} page is {len(data)} bytes')

请注意,为了简化示例,省略了异常处理和一些细节(如代理IP的获取和更换逻辑)。在实际应用中,你需要根据目标网站的具体情况和反爬虫策略来调整代码。此外,使用代理时需要注意代理的稳定性和可用性,以及是否遵守了代理服务提供商的使用条款。

4.2. 登录验证

有些页面需要登录后才能访问。这时,我们可以通过在请求头中携带cookie信息来模拟登录状态。cookie可以通过在浏览器中登录知乎后获取。
在进行网络爬虫任务时,经常会遇到需要登录验证的网站。登录验证是网站为了保护用户数据和防止自动化脚本恶意访问而设置的一种安全机制。当爬虫试图访问需要登录后才能查看的内容时,如果未通过登录验证,通常会被重定向到登录页面或者被服务器拒绝访问。
登录验证问题对爬虫来说是一个挑战,因为它要求爬虫模拟用户登录过程,这通常涉及到处理HTTP请求、Cookies、Session以及可能的验证码等。
常见的几种解决方法

  1. 模拟登录过程
    • 分析网站的登录流程,包括请求的URL、请求方法(GET或POST)、提交的表单数据等。
    • 使用编程语言中的HTTP库(如Python的requests库)来模拟这个登录过程,发送正确的登录表单数据,并处理登录成功后返回的Cookies或Tokens。
  2. 使用Selenium或Puppeteer等工具
    • 这些工具可以模拟真实的浏览器环境,自动处理Cookies、JavaScript执行等复杂问题。
    • 通过Selenium或Puppeteer,可以模拟用户点击登录按钮,输入用户名和密码等操作,从而绕过登录验证。
  3. 使用已有的登录API
    • 一些网站会提供API接口供开发者使用,如果网站提供了登录API,可以直接使用该API进行登录验证。
  4. 处理验证码
    • 登录过程中可能会遇到验证码挑战,这时可以使用OCR(光学字符识别)技术来识别验证码。
    • 或者使用第三方验证码识别服务。
    • 对于一些简单的验证码,也可以尝试手动输入验证码来获取登录后的Cookies,并在爬虫中使用这些Cookies。
  5. 使用已登录用户的Cookies
    • 如果可能的话,可以通过浏览器手动登录后导出Cookies,并在爬虫中使用这些Cookies来绕过登录验证。
    • 但这种方法可能不是长久之计,因为Cookies可能会过期或被服务器定期刷新。
  6. 分布式爬虫与IP轮询
    • 对于需要频繁登录的情况,可以使用分布式爬虫架构,将登录任务分散到多个爬虫实例上。
    • 结合IP轮询技术,使用不同的IP地址进行登录尝试,以降低单个IP被封锁的风险。
  7. 与网站开发者协商
    • 如果爬虫的目的是为了学术研究或数据分析等合法用途,可以尝试与网站开发者或管理员协商,请求提供API接口或特殊的数据获取方式。
4.3. 翻页问题

知乎的回答通常是分页显示的,每页包含一定数量的回答。为了获取所有回答,我们需要循环发送请求,每次请求时修改URL中的偏移量(offset)参数,以实现翻页功能。
在爬虫任务中,翻页问题是指当需要从网站上爬取大量数据时,这些数据可能分布在多个页面中,因此爬虫需要能够自动地遍历这些页面以收集所有数据。翻页问题主要涉及如何识别和访问网站中的后续页面。由于网站设计和实现的不同,翻页机制也各异,这增加了爬虫翻页处理的复杂性。常见的几种解决方法:

  1. 基于URL模式的翻页
    有些网站的URL中会包含页码信息,例如example.com/page/1、example.com/page/2等。这种情况下,爬虫可以通过改变URL中的页码部分来访问不同的页面。
  2. 基于链接的翻页
    许多网站在页面底部提供“下一页”或页码链接。爬虫可以通过解析这些链接来找到并访问后续页面。这通常需要使用HTML解析库(如BeautifulSoup)来定位和提取这些链接。
  3. 基于JavaScript的翻页
    有些网站使用JavaScript(特别是Ajax)来加载后续内容,而不是通过传统的页面刷新。在这种情况下,爬虫需要模拟这些Ajax请求或使用Selenium等工具来执行JavaScript并捕获动态加载的内容。
  4. 基于表单提交的翻页
    某些网站的翻页机制可能涉及表单提交,例如通过POST请求发送页码信息到服务器。爬虫需要模拟这些表单提交来获取不同页面的数据。
  5. 使用网站API
    如果目标网站提供了API接口来访问数据,那么最直接的翻页方式就是通过API的分页参数来获取不同页面的数据。这通常是最稳定和最高效的方法。
  6. 无限滚动页面
    对于无限滚动的页面(当用户滚动到页面底部时,新内容会自动加载),爬虫需要模拟滚动事件或使用特定的JavaScript调用来触发内容加载。
  7. 处理反爬虫机制
    有些网站会使用各种反爬虫技术来阻止自动化访问。在处理翻页时,爬虫可能需要处理验证码、Cookies、User-Agent检查等反爬虫机制。
  8. 设置适当的延迟
    为了避免被目标网站封锁或限制访问,爬虫在翻页过程中应设置适当的请求延迟,以模拟人类用户的正常访问速度。
  9. 错误处理和重试机制
    由于网络问题或目标网站的变动,爬虫在翻页过程中可能会遇到失败的情况。实现一个健壮的错误处理和重试机制对于确保爬虫的稳定运行至关重要。
4.4 反爬虫机制

通常情况下,网站采用了一系列的反爬虫机制来防止数据被恶意爬取。例如,可能会检测请求的频率、来源、是否携带了正确的cookie等。为了应对这些反爬虫机制,我们可以采取一些策略,如设置合理的请求间隔、使用代理IP、模拟用户行为等。
反爬虫机制是网站为了保护自身数据、防止内容被恶意爬取或滥用而设置的一系列技术手段。这些机制旨在识别和阻止自动化爬虫程序的访问,从而确保网站数据的安全性和服务的稳定性。当爬虫程序触发这些反爬虫机制时,可能会面临被封禁IP、访问受限或接收错误数据等风险。常见的几种解决方法:

  1. 设置合理的请求间隔
    • 通过增加爬虫请求之间的时间间隔,模拟人类用户的正常访问频率,以降低触发反爬虫机制的风险。
  2. 使用代理IP
    • 使用代理服务器发送请求可以隐藏爬虫的真实IP地址,避免因频繁请求而被封禁。可以通过购买或获取免费的代理IP池,并在爬虫中随机选择代理进行请求。
  3. 伪装User-Agent
    • 通过设置随机的User-Agent,模拟不同浏览器或设备的访问,以规避基于User-Agent的反爬虫策略。
  4. 处理Cookies和Session
    • 对于需要登录或保持会话状态的网站,正确处理Cookies和Session信息是关键。可以通过模拟登录过程获取Cookies,并在后续请求中携带这些Cookies。
  5. 分布式爬虫
    • 将爬虫程序部署在多个服务器或IP上,分散请求压力,减少单个IP的请求频率,从而降低被封禁的风险。
  6. 错误处理和重试机制
    • 当爬虫遇到反爬虫机制导致的访问受限或错误时,实现合理的错误处理和重试机制,以避免因临时封禁而导致的爬虫失败。
  7. 使用Web服务API
    • 如果目标网站提供API接口,最好通过API进行数据抓取,这样通常不会触发网站的反爬虫机制。
  8. 遵守robots.txt规则
    • 在进行爬虫任务前,检查并遵守目标网站的robots.txt文件规则,以确保爬虫行为的合法性。
  9. 图像识别和验证码处理
    • 对于包含验证码的反爬虫机制,可以使用图像识别技术(如OCR)来自动识别验证码,或者通过第三方服务来解决。
  10. 限制爬取速率和深度
  • 合理设置爬虫的爬取速率和爬取深度,避免对目标网站造成过大的访问压力。
  1. 使用专业的爬虫框架或库
  • 利用像Scrapy、BeautifulSoup、Selenium等专业的爬虫框架或库,它们通常内置了一些反反爬虫的策略和机制。

五、总结与展望

随着大模型技术的不断发展,内容解析的方式正在发生深刻变革。大模型加持下的提示工程方法为爬虫技术带来了前所未有的便利和效率提升。然而,我们也应该意识到,这种方法并非万能之药,它仍然需要结合具体任务进行定制化的优化和调整。未来,我们期待看到更多关于大模型在爬虫领域的应用和研究,以推动这一技术的进一步发展和完善。

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

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

相关文章

XILINX 7系列时钟资源

文章目录 前言一、时钟概要1.1、CC1.2、BUFR、BUFIO、BUFMR1.3、CMT1.4、BUFH1.5、BUFG 二、时钟路由资源三、CMT 前言 本文主要参考xilinx手册ug472 一、时钟概要 7系列FPGA时钟资源主要有CC、BUFR、BUFIO、BUFMR、CMT、BUFG、BUFH和GTE_COMMON 1.1、CC “CC”&#xff0…

OpenHarmony开发案例:【自定义通知】

介绍 本示例使用[ohos.notificationManager] 等接口&#xff0c;展示了如何初始化不同类型通知的通知内容以及通知的发布、取消及桌面角标的设置&#xff0c;通知类型包括基本类型、长文本类型、多行文本类型、图片类型、带按钮的通知、点击可跳转到应用的通知。 效果预览&am…

TensorFlow实战Google深度学习框架 PDF书籍分享

今天又来给大家推荐一本TensorFlow方面的书籍<TensorFlow实战Google深度学习框架>。本书适用于想要使用深度学习或TensorFlow的数据科学家、工程师&#xff0c;希望了解大数据平台工程师&#xff0c;对人工智能、深度学习感兴趣的计算机相关从业人员及在校学生等。 下载当…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈&#xff0c;实现一个队列功能 add delete length 队列 用数组可以实现队列&#xff0c;数组和队列的区别是&#xff1a;队列是逻辑结构是一个抽象模型&#xff0c;简单地可以用数组、链表实现&#xff0c;所以数组和链表是一个物理结构&#xff0c;队列是一个逻…

Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘

Android Studio新建项目就报错&#xff1a; Cannot access ‘androidx.activity.FullyDrawnReporterOwner’ which is a supertype of ‘cn.dazhou.osddemo.MainActivity’. Check your module classpath for missing or conflicting dependencies 整个类都报错了。本来原来一直…

阿里面试:DDD中的实体、值对象有什么区别?

在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;有两个基础概念&#xff1a;实体&#xff08;Entity&#xff09;和值对象&#xff08;Value Object&#xff09;。 使用这些概念&#xff0c;我们可以把复杂的业务需求映射成简单、明确的数据模型。正确使用实体和值对…

【环境】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 一、培养项目系统性思维 1.1 系统性思维 1.2 系统性思维的价值 1.3 建模和推演&数字孪生 二、项目的复杂性和如何驾驭复杂性 2.1 复杂性的三个维度 2.2 如何驾驭复杂性 三、…

【御控物联】Java JSON结构转换(4):对象To对象——规则属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

谷歌pixel6/7pro等手机WiFi不能上网,显示网络连接受限

近期在项目中遇到一个机型出现的问题,先对项目代码进行排查,发现别的设备都能正常运行,就开始来排查机型的问题,特意写出来方便后续查看,也方便其它开发者来自查。 设备机型:Pixel 6a 设备安卓版本:13 该方法无需root,只需要电脑设备安装adb(即Android Debug Bridge…

GPT提示词分享 —— 解梦

&#x1f449; 对你描述的梦境进行解读。 我希望你能充当一个解梦者。我将给你描述我的梦&#xff0c;而你将根据梦中出现的符号和主题提供解释。不要提供关于梦者的个人意见或假设。只提供基于所给信息的事实性解释。 GPT3.5的回答 GPT3.5 &#x1f447; 感觉有点傻&#xf…

申请免费https证书

https证书是什么&#xff1a; https证书是指在http超文本传输协议的前提下安装部署了SSL/TLS证书后形成的全新协议&#xff0c;https安全超文本传输协议。在https证书部署完成后&#xff0c;服务器端和浏览器端进行的信息交互的过程中会有加密层保护&#xff0c;使得原本明文传…

群晖NAS安装Synology Office与Drive结合内网穿透实现本地文件公网分享与远程协作

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

【解决】Spring Boot创建项目常见问题

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring学习之路&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 idea无maven选项 无效发行版17 类⽂件具有错误的版本 61.0, 应为 …

H5获取微信openid封装方法

H5获取微信openid封装方法 目录1、前置配置条件2、封装并新建getOpenid.js文件2.1&#xff1a;处理code方法2.2&#xff1a;第一次获取到openid后&#xff0c;再次进入无需再次获取&#xff1b;2.3&#xff1a;页面调用方法 3、往期回顾总结&#xff1a; 目录 接到需求&#xf…

腾讯EdgeOne产品测评体验—Web安全的攻与防:云端防护一体化

目录 简介接入准备EdgeOne购买及接入服务器环境配置添加测试站点关闭防护 安全性能测试XSS攻击sql注入 站点加速测试代码测试通过在线工具对比测试Ping检测tcping网站测速 HTTPS证书 操作步骤优点 总结EdgeOne的优缺点 简介 EdgeOne&#xff0c;作为腾讯云推出的全新CDN解决方…

使用icpc tool进行滚榜操作

前言 参加ACM的同学都知道&#xff0c;比赛非常有趣的环节就是赛后的滚榜环节&#xff0c;所以为了一个比赛的完整性&#xff0c;自己办比赛时也想要加入滚榜的操作&#xff0c;经过一段时间的研究学习&#xff0c;已经可以将滚榜程序与domjudege程序成功完成融合&#xff0c;…

node.jd版本降级/升级

第一步.先清空本地安装的node.js版本 按健winR弹出窗口&#xff0c;键盘输入cmd,然后敲回车&#xff08;或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出&#xff0c;输入cmd再点击回车键&#xff09; 进入命令控制行窗口&#xff0c;输入where node&#xff0c;查看本地…

CentOS7.9下载及安装教程

1. 下载CentOS7.9 CentOS用的最多的是7.6&#xff0c;7.9是7里面最新的&#xff0c;至于8以上的版本听说没有维护和更新了&#xff0c;这里以7.9为例。 下载&#xff1a;https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 2. 新建虚拟机 新建虚拟机–>典型(推荐…

【iOS开发】(一)2024 从一无所有开始,到ios开发(react Native)

​ 2024 从一无所有开始&#xff0c;到ios开发&#xff08;react Native&#xff09; 目录标题 1 工具简介2 基础环境搭建1 安装 brew2 安装 Node.js3 安装 Yarn4 安装 React Native 脚手架 3 ios环境搭建4创建并启动一个app 在这里插入图片描述 1 工具简介 Homebrew (brew)&a…

Window安装Redis

安装Redis-Service 下载并安装最新版Redis-windows &#xff1a; https://github.com/redis-windows/redis-windows 安装Redis-Manager Another Redis Desktop Manager 是一款优秀Redis桌面(GUI)管理客户端 参考链接 https://redis.io/