【爬虫新手村】零基础入门到实战:解锁互联网数据收集的密钥,爬虫技术全攻略

news2024/9/20 8:37:48

在这里插入图片描述

文章目录

  • 前言
  • 一、爬虫
    • 1.基本概念
    • 2.常用库
    • 3.基本步骤
    • 4.注意事项
  • 二、爬虫示例代码
    • 1.案例一:requests 的基本使用
    • 2.案例二:爬取古诗文(requests+BeautifulSoup)
    • 3.案例三:爬取美食(requests+BeautifulSoup)
    • 4.案例四:爬取美食Video(requests+BeautifulSoup)
    • 5.案例五:爬取图片并以二进制形式写入(requests)
    • 6.案例六:反爬-伪装请求头-IP代理(requests+fake_useragent)
    • 7.案例七:爬取网易汽车图片以二进制写入(requests)
    • 8.案例八:selenium的基本使用
    • 9.案例九:通过爬虫查看QwenToken余额(selenium+BeautifulSoup)
    • 10.案例十:selenium 设置无头浏览器


前言

    在当今信息爆炸的时代,爬虫技术成为高效获取互联网数据的关键工具。本文为初学者精心打造了一份入门级爬虫指南,从基础概念、常用库介绍到实战案例分享,全方位覆盖爬虫技术的核心要点。通过学习本文,你将掌握爬虫的基本步骤、requests、BeautifulSoup、selenium等工具的使用及实战技巧,并了解在爬虫过程中应遵守的法律法规和道德准则。无论你是编程爱好者还是数据分析师,本文都能助你快速入门爬虫技术,开启数据收集与分析的新篇章。
在这里插入图片描述


一、爬虫

    Python 爬虫(Web Scraping 或 Web Crawling)是一种自动化程序,用于从互联网上抓取或提取数据。Python 由于其简洁的语法、丰富的库支持以及强大的社区,成为了实现爬虫功能的热门选择。下面将简要介绍Python爬虫的基本概念、常用库以及一些基本步骤。

1.基本概念

  • 爬取(Scraping): 从网页中提取信息的过程。
  • 爬虫(Crawler): 自动浏览互联网(特别是万维网)的机器人程序,它可以按照设定的规则自动抓取网页上的信息。
  • 反爬虫(Anti-Scraping): 网站为防止爬虫抓取数据而采取的技术措施,如设置验证码、限制请求频率等。
  • 解析(Parsing): 从HTML或XML等格式的网页中提取结构化数据的过程。

2.常用库

requests 用于发送HTTP请求,是爬虫中常用的库之一。
BeautifulSoup 用于从HTML或XML文件中提取数据,通过解析文档为用户提供需要抓取的数据。
Scrapy 一个快速高级的Web抓取和网页抓取框架,用于爬取网站并从页面中提取结构化的数据。Scrapy使用Twisted异步网络框架来处理网络通讯。
Selenium 一个用于Web应用程序测试的工具,支持多种浏览器和平台。它可以直接模拟用户操作浏览器,非常适合需要JavaScript渲染的网页。
lxml 一个高效的HTML和XML解析库,支持XPath和XSLT。

3.基本步骤

  1. 确定目标: 明确你要抓取的数据和来源网站。
  2. 分析网页: 查看网页的源代码,了解数据是如何嵌入在HTML中的。
  3. 编写爬虫:
    • 使用requests发送HTTP请求获取网页内容。
    • 使用BeautifulSouplxmlScrapy解析网页,提取所需数据。
    • 如果有JavaScript渲染,可能需要使用Selenium
  4. 存储数据: 将提取的数据保存到文件(如CSV、JSON)、数据库或进行进一步处理。
  5. 处理异常: 添加错误处理机制,如重试机制、超时设置等,以提高爬虫的健壮性。
  6. 遵守法律与道德: 确保你的爬虫行为符合目标网站的robots.txt文件规定,尊重版权和隐私。

4.注意事项

  • 尊重版权: 在爬取网站数据时,要尊重网站的版权和隐私政策,避免侵犯他人的合法权益。
  • 避免过度请求: 合理设置请求频率,避免给目标网站服务器带来不必要的负担。
  • 反爬虫策略: 针对网站的反爬虫措施,可能需要采取如设置请求头、使用代理IP、模拟用户行为等策略。

二、爬虫示例代码

1.案例一:requests 的基本使用

requests-get请求:

import requests

# 发送GET请求
url = 'https://www.baidu.com'
response = requests.get(url)
response.encoding = response.apparent_encoding # 使用其自动检测到的最合适的编码方式来解码响应内容
# 处理响应
print(response.status_code)  # 获取响应状态码
print(response.text)  # 以字符串形式获取响应体
# print(response.json())  # 如果响应体是JSON格式,可以直接解析为Python字典或列表

requests-post请求

import requests

# 发送POST请求
data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)
# ... 处理响应 ...
print(response.status_code)  # 获取响应状态码
print(response.text)  # 以字符串形式获取响应体
print(response.json())  # 如果响应体是JSON格式,可以直接解析为Python字典或列表

2.案例二:爬取古诗文(requests+BeautifulSoup)

import requests
from bs4 import BeautifulSoup

url = "https://www.gushiwen.cn/shiwens/"

resp = requests.get(url)
if resp.status_code != 200:
    print("请求失败")

resp.encoding = resp.apparent_encoding
soup = BeautifulSoup(resp.text, "html.parser")

div_list = soup.select("#leftZhankai > div.sons")
for div in div_list:
    title = div.select("div.cont > div:nth-child(2) > p > a > b")[0].string
    name = div.select("div.cont > div:nth-child(2) > p.source > a > img")[0].get("alt")
    pic = div.select("div.cont > div:nth-child(2) > p.source > a > img")[0].get("src")
    # 使用str.format进行对齐,保留20个空格的宽度
    print("{:<20}  {}  {}".format(title, name, pic))

在这里插入图片描述

3.案例三:爬取美食(requests+BeautifulSoup)

import requests
from bs4 import BeautifulSoup

url = "https://www.meishij.net/caixi/lucai/"
resp = requests.get(url)
resp.encoding = resp.apparent_encoding

soup = BeautifulSoup(resp.text, "html.parser")
div_list = soup.select("body > div.main_w.clearfix > article > div.list_s2 > div.list_s2_content > div")
for div in div_list:
    dish_name = div.select("a > strong")[1].string
    ingredients = div.select("a > span")[0].string
    print("菜名:",dish_name,end="-------------")
    print("原材料:",ingredients)

在这里插入图片描述

4.案例四:爬取美食Video(requests+BeautifulSoup)

import requests
from bs4 import BeautifulSoup
import json
import os

base_path = "D:\Gtop\AHA\myvideos"

url = "https://www.meishij.net/video/"
resp = requests.get(url)
# print(resp.status_code)
# print(resp.text)
# print(resp.content)

soup = BeautifulSoup(resp.text, "html.parser")
video_list = soup.select("#v_list > div.v_item")
print(len(video_list))
for video in video_list:
    video_href = video.select_one("a").get("href")
    # print(video_href)
    resp_video = requests.get(video_href)
    soup_video = BeautifulSoup(resp_video.text, "html.parser")
    video_url = soup_video.select_one("#msj_video").get("src")
    print(video_url)

    ret_video = requests.get(video_url)
    video_path = os.path.join(base_path, video_href.split("/")[-1].split(".")[0]+".mp4")

    with open(video_path, "wb") as f:
        f.write(ret_video.content)
    print(video_path,"下载成功...")

在这里插入图片描述

5.案例五:爬取图片并以二进制形式写入(requests)

import requests
import json
import os

base_path = "D:\Gtop\AHA\imgs"
url = "https://pic-bucket.ws.126.net/photo/0008/2022-06-13/H9OM3FK2S5L70008NOS.jpg?imageView&thumbnail=300y225"
resp = requests.get(url)
print(resp.content) #二进制内容

pic_name = url.split("/")[-1].split("?")[0]
file_path = os.path.join(base_path,pic_name)

with open(file_path,"wb") as f:
    f.write(resp.content)

在这里插入图片描述

6.案例六:反爬-伪装请求头-IP代理(requests+fake_useragent)

import requests
url = 'https://baidu.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
ip_pool = {
    'http': '218.87.205.225:19170',
}
resp = requests.get(url, headers=headers, proxies=ip_pool)
print(resp.status_code)

也可使用fake_useragent,伪造ua:

import fake_useragent

ua = fake_useragent.UserAgent()
print(ua.random)
# 输出:Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36

7.案例七:爬取网易汽车图片以二进制写入(requests)

import requests
import json
import os

base_path = "D:\Gtop\AHA\imgs"
# 可以直接从下面接口中拿到数据的
url = "https://product.auto.163.com/rank/api/duration"
hd = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}

resp = requests.get(url)

print("resp.request.headers---",resp.request.headers)

data = json.loads(resp.text)

# print(resp.content)
for item in data['result']:
    chexi_name = item['chexi_name']
    chexi_photo_white = item['chexi_photo_white']
    print(chexi_name, chexi_photo_white)

    pic_name = item['chexi_photo_white'].split('/')[-1].split('?')[0]
    file_path = os.path.join(base_path, pic_name)

    # 请求图片
    r_img = requests.get(item['chexi_photo_white'])
    with open(file_path, 'wb') as f:
        f.write(r_img.content)
    print(f"车系:{chexi_name},{pic_name}下载成功!")

在这里插入图片描述
在这里插入图片描述

8.案例八:selenium的基本使用

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")

print(browser.title) #获取网页的标题

src = browser.find_element(By.ID,"s_lg_img").get_attribute("src")
print(src) #获取百度logo的src地址

# 定位到搜索框,向搜索框输入内容
browser.find_element(By.ID, "kw").send_keys("abcdefg")

#点击百度一下按钮
browser.find_element(By.ID,"su").click()

time.sleep(60*60*24)

# 输出:
# 百度一下,你就知道
# https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png



在这里插入图片描述

9.案例九:通过爬虫查看QwenToken余额(selenium+BeautifulSoup)

# import requests
from bs4 import BeautifulSoup
import time
# import json
# url = "https://dashscope.console.aliyun.com/data/api.json?action=ListUseModels&product=dashscope-console&_tag="
# headers = {
#     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
#     "Cookie": "t=631b97006f3fe62c25c730e5b215f900; login_current_pk=1333082122782615; yunpk=1333082122782615; currentRegionId=cn-hangzhou; tongyi_guest_ticket=40RZObgNrRX*cqHExMqtvRix7leSaU_*gVJ5TgK6swhe03u6yQ5Qc2oDc8uU_yWEm8nW$JCLpIOj0; tongyi_sso_ticket=5E_fb*zzp_8Gn1gsBy1ogROHqapzX0Ccdoyjng$ZacqABBuwXb4xTQVBMHzcrKUAZpZ9VMPUbwuz0; channel=cywf456fmfAutgp66hVf7f2VzCdE4JYIsBnjm%2B6O3fi2fXF5h6q56LYuPc9dxADvL%2BekMN0ZagoRDtPaUg1mAw%3D%3D; cna=lC76F8dphWMCAW+je/ernQ42; _uab_collina=172172179858810191629785; _umdata=G303F989AF3E4FC951911EDA814C72C867C2DB2; cnaui=1719748536469290001; aui=1719748536469290001; sca=924a6421; _samesite_flag_=true; login_aliyunid_ticket=fyKpeu*0vCmV8s*MT5tJl3_1$$wbRxrU8lkjdMu1soaUcn05MXRAAyuSRjQSjsQj9CAj_f_8NpoU_BOTwChTBoNM1ZJeedfK9zxYnbN5hossqIZCr6t7SGxRigm2Cb4fGaCdBZWIzmgdHq6sXXZQg4WF0; login_aliyunid_pk=1333082122782615; hssid=CN-SPLIT-ARCEByIOc2Vzc2lvbl90aWNrZXQyAQE4qsqXjpEyQAFKELnmoY_PdWAVsCf39ATNCapRKRONFVcduL936ppM3YRMxb7cjw; hsite=6; aliyun_country=CN; partitioned_cookie_flag=doubleRemove; aliyun_lang=zh; login_aliyunid_csrf=_csrf_tk_1928322580068200; login_aliyunid=HAHAHa****; aliyun_cert_type_common=1; help_csrf=EO6Xp%2F9TG7eee8xY3kYM1KtFTbpOYlCAxfIqHq1yA7KUkOzHPlOeH32N%2Ba4%2F2xPrKWLPv0sthsf0BlhE35zN%2Fj7JHWzs1r6eV46tmaGMIDYOucM30Pf17406KXlSXg8E2xp2W%2BYrm%2F9bQRXVOFCpNA%3D%3D; cr_token=a748bab5-0a3e-450f-9bc3-dd3b37796fcd; atpsida=18185f8c00bb78974abbecdb_1722580219_6; tfstk=fKHmT9XqhjPb2KS9oY2X650CozR-hZw_ZVBTWRUwazzSBnaxBPzizclY_Ig9IdoKy5kYHm3lcY0hBtLXGcWgBR8pJppKcnw_QenwvWGcllqdQdFNgTJ4lAJMJppK0IrbB08pf2-Z3PraQoPa78-uckf4QSPN43qaXZ5N3VoyqlazbZWVg7ozfkXV_jb2grMZUY843auWwzuSEoVywmzylXkzmS4E0xb5Pgq0iyo4reeYjtFrf5D1fOVi0Xg_Yq72SPMo4xlE8UCYuXqivfm23TyxhmlU_v81_mwYo8kqtGWZq-4xSA05oU4Eh0kQU7pex0kSkmMoXGJa22UrcxyMLHw03ryuVAL53Pcr_xFbCZ8g5Ymr3fjrr_5FFDW_4hHP11N4Vu4B9nFgzS6d_Pxkq6-_guZbJ3xl11N4Vu4pq3feGSr7cyC..; isg=BKys-lqy5tN_gfTgdJsx-nKffYreZVAPeSXaGAbtuNf6EUwbLnUgn6KnMdmpmYhn"
# }
# response = requests.post(url, headers=headers)
# print(response.status_code)
# print(response.json())

from selenium import webdriver
url = "https://dashscope.console.aliyun.com/overview"
# url = "https://blog.csdn.net/m0_48173416?type=blog"
driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
driver.get(url)
# print(driver.page_source)
time.sleep(20) # 等待页面JS渲染完成
print("soup")
soup = BeautifulSoup(driver.page_source, "html.parser")
# print(soup)
# HAHAHa1122
# q1w2e3r4t5

data = soup.select("#app > div.sc-bdVaJa.hMdjPy.wind-rc-app-layout.windcc-app-layout > div.sc-bZQynM.jexhMp.windcc-app-layout__content > div > div > div.sc-1juic4-0.sc-1bsfzqf-0.dPhReS > div > div > div.components-Layout-___index-scoped__over-left-zero___CCNQj > div:nth-child(2) > div > div > div.next-card-body > div > div > div:nth-child(1) > div > table > tbody > tr.next-table-row.first > td:nth-child(4) > div > div")
# data = soup.select("#uid > span") #name
print(len(data))
print(data[0].text)



#------------------------------------------------------------
#输出:
#>>>soup
#>>>1
#>>>953461/1000000

10.案例十:selenium 设置无头浏览器

#导入selenium库
from selenium import webdriver
# 在这里导入浏览器设置相关的类
from selenium.webdriver.chrome.options import Options
# from selenium.webdriver.edge.options import Options

# ---------------无可视化界面设置(无头模式设置开始)-------------------------------- #
chrome_options = Options()
# 使用无头模式
chrome_options.add_argument('--headless')
# 禁用GPU,防止无头模式出现莫名的BUG
chrome_options.add_argument('--disable-gpu')
# 将参数传给浏览器
browser = webdriver.Edge(options=chrome_options)
# ---------------无可视化界面设置(无头模式设置结束),下面可以正常写代码了------------- #

# 启动浏览器
url = "https://baidu.com"
browser.get(url)
print(browser.title)

# 关闭浏览器
browser.quit()

在这里插入图片描述

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

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

相关文章

智能语音识别技术在无人驾驶领域的应用案例

随着无人驾驶技术的进步与发展&#xff0c;越来越多的企业、创业者注意到无人驾驶领域潜藏的巨大市场经济价值&#xff0c;越来越多的企业和创业者进入无人驾驶领域&#xff0c;以近期业内关注的萝卜快跑为例&#xff0c;其在武汉地区的成功推广与落地预示着无人驾驶在网约车领…

Linux的应用领域与历史发展

目录 linux应用领域 个人桌面领域的应用 服务器领域 嵌入式领域 linux概述 linux和unix的关系 linux应用领域 linux下开发项目&#xff0c;javaee&#xff0c;大数据&#xff0c;python&#xff0c;php&#xff0c;c&#xff0c;c&#xff0c;go等。 个人桌面领域的应…

DHU OJ 二维数组

思路及代码 #include<iostream> using namespace std; int main(){ //input 多组 //input M,N int 1< <20 //input M 行 N 列 数据 //initialize listint M, N;while (cin >> M >> N){int list[M][N];for (int i 0; i < M-1; i){for (int j 0; j…

基于价值流DevSecOps效能案例分享

背景 数字经济时代&#xff0c;企业数字化转型加速&#xff0c;软件业务收入目标设定&#xff0c;产业基础保障水平提升。DevSecOps: 作为解决交付能力挑战的方法&#xff0c;强调开发&#xff08;Dev&#xff09;、安全&#xff08;Sec&#xff09;、运维&#xff08;Ops&…

替代进程注入的新工具

目录 前言 Windows Session 的利用 Windows Session 介绍 跨会话激活技术 什么是跨会话激活机制&#xff1f; 常见的跨会话激活技术 结合利用 地址 前言 众所周知&#xff0c;常用的C2工具&#xff08;例如CobaltStrike&#xff09;在另一个进程上下文中执行代码经常使…

【安全科普】学完网络安全出去能做什么工作?

想要了解学完网络安全工程师就业班后&#xff0c;出去能做什么工作&#xff0c;这个时候会分甲方或是乙方&#xff0c;看个人更偏向哪个岗位。 甲方指的是政府、海关、税务机构、高校及其他国有银行、商业银行&#xff0c;以及移动运营商&#xff08;如中国移动、中国联通、中…

如何保证数据不丢失?(死信队列)

死信队列 1、什么是死信 死信通常是消息在特定的场景下表现&#xff1a; 消息被拒绝访问消费者发生异常&#xff0c;超过重试次数消息的Expiration过期时长或者队列TTL过期时间消息队列到达最大容量 maxLength 2、什么是死信队列 只由死信构成的消息队列是死信队列 死信队…

积加ERP与金蝶云星空对接集成FBA月度差异打通其他出库新增

积加ERP与金蝶云星空对接集成FBA月度差异打通其他出库新增 对接源平台:积加ERP 积加创始人及核心产品技术团队&#xff0c;深耕于跨境电商技术领域十余年&#xff0c;深刻领悟卖家在Amazon业务运营各环节的核心诉求&#xff0c;结合多年技术管理经验&#xff0c;全面考虑中国卖…

实用好软-----超简单的图片加水印工具 方便 实用 避免盗用

日常生活中&#xff0c;我们经常在图片或者视频上看到一些具有独特设计的文字或者图片&#xff0c;并且下载后依旧会存在于其中&#xff0c;这种常见的标识叫做——水印。 一.水印&#xff1f; 随着人们版权意识的觉醒&#xff0c;越来越多的人为了防止自己的图片被盗用&#…

visual studio2022如何安装.net framework4.0

visual studio2022如何安装.net framework4.0 背景 老版本代码.Net Framework4.0,visual studio2022不支持,可以通过导入包来解决。 解决办法 通过 nuget 下载 4.0 安装包 下载地址&#xff1a;https://www.nuget.org/packages/Microsoft.NETFramework.ReferenceAssemblie…

MapStruct 实体类转换工具,看这一篇就够了!

前言 DTO&#xff08;Data Transfer Object&#xff09;&#xff1a;数据传输对象&#xff0c;这个概念来源于J2EE的设计模式&#xff0c;原来的目的是为了EJB的分布式应用提供粗粒度的数据实体&#xff0c;以减少分布式调用的次数&#xff0c;从而提高分布式调用的性能和降低…

基于NXP IMX8P+FPGA+AI全自动化学发光免疫分析仪解决方案

全自动化学发光免疫分析仪 全自动化学发光免疫分析仪可对受试者的全血、血清、血浆标本进行分析&#xff0c;从而制定科学的治疗或者处置方案。 IMX8P采用Cortex-A53架构四核处理器&#xff0c;主频高达1.8GHz&#xff0c;标配2G内存&#xff0c;强劲的视频处理能力搭配高版本…

贪心算法总结(4)

一、跳跃游戏I 55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool canJump(vector<int>& nums) {//贪心双指针 用left和right指向两个区间 然后maxpos表示下一层的最右端点int left0,right0,maxpos0,nnums.size();while(left<…

《乳腺密度高的女性中,使用AI辅助的乳腺X线筛查与补充筛查超声的比较研究》| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Screening Outcomes of Mammography with AI in Dense Breasts: A Comparative Study with Supplemental Screening US 《乳腺密度高的女性中&#xff0c;使用AI辅助的乳腺X线筛查与补充筛查超声的比较研究》 Background 背景 Comparative performance between…

html+css 实现hover 故障效果按钮

前言:哈喽,大家好,今天给大家分享html+css 实现hover 故障效果按钮!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、原理解析💡1.这是一个,鼠标hover时,显示故障的效…

WechatBotCMD:通过命令行接口实现微信机器人自动化

WechatBotCMD&#x1f916;&#xff1a;通过命令行接口实现微信机器人自动化 WechatBotCMD简介WechatBotCMD的核心功能1. **命令行界面 (CLI)**2. **消息处理与自动回复**3. **定时任务**4. **群聊管理**5. **配置管理** 如何安装或引入 WechatBotCMDWechatBotCMD使用示例启动和…

Leetcode JAVA刷刷站(33)搜索旋转排序数组

一、题目概述 二、思路方向 要设计一个时间复杂度为 O(log n) 的算法来找到旋转排序数组中的目标值&#xff0c;我们可以利用二分查找的变种方法。关键在于&#xff0c;虽然数组被旋转了&#xff0c;但数组被分为两部分后&#xff0c;每部分仍然是升序的。我们可以利用这个性质…

后端Web核心之请求响应

目录 1.概述 2.接收请求 简单参数和实体参数 数组集合参数 日期参数和JSON参数 路径参数 总结 3.返回响应 1.概述 Web请求和响应是HTTP协议中的核心概念&#xff0c;它们是客户端&#xff08;通常是浏览器&#xff09;与服务器之间通信的基础。 浏览器发起请求后&…

大数据-85 Spark 集群 RDD创建 RDD-Action Key-Value RDD详解 RDD的文件输入输出

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09; HDFS&#xff08;已更完&#xff09; MapReduce&#xff08;已更完&…

机器学习:knn算法

1、概述 全称是k-nearest neighbors&#xff0c;通过寻找k个距离最近的数据&#xff0c;来确定当前数据值的大小或类别。K-近邻算法是一种基本而又有效的机器学习算法&#xff0c;用于分类和回归任务。它属于实例学习方法&#xff0c;或者说是一种基于规则的记忆方法。 2、基本…