目录
一、K近邻(KNN)
1、K近邻算法概述
K近邻算法属于分类算法,属于比较简单的算法,核心思想是“近朱者赤,近墨者黑”,根据临近样本计算自身的标签。
2、算法图示
- 从最近的K个样本的标签,依据少数服从多数的原则确定自身的标签;
- 三要素:训练数据集、距离度量(欧氏距离)、K值选择。
算法运行流程描述:
上图显示的是不同样本的展示,绿点是新样本,新样本的标签的确定就是依据附近的点确定,采用的原则是少数服从多的原则,选取离该点最近的K个点。
3、算法的要点:
3.1算法计算步骤
计算步骤如下:
算距离:给定样本与训练数据集中有点样本计算距离(欧氏距离),然后排序;
找邻居:确定K个距离最近的值,从上一步的排序中取前K个值;
打标签:依据选定的K个值的标签,采用少数服从多数的原则。
相似度计算:
相似度衡量:两个向量的距离衡量其相似度,越近越相似。
计算方式:采用欧氏距离、夹角余弦等。
类别的判定:
采用少数服从多数的方法进行确定新样本的标签。
4、算法的不足
该算法适合平衡样本,数据量比较比较大。当样本比较小,且样本不平衡时容易造成偏向于样本多的特征,造成错误分类。
改善的方法:给与离新样本最近的样本点大的权重,确定其标签。
二、朴素贝叶斯算法
1、算法概述
朴素贝叶斯算法是贝叶斯算法的统称,属于概率算法,通过计算样本所属的类别概率,获取概率最大的作为样本的最终的概率。
朴素:条件概率独立性
2、算法的核心思想
朴素贝叶斯的核心思想是,某件事在一些属性条件下随机发生,事件发生属于A的概率大于属于B的概率,那么该事件的判定为A。
三、logistic逻辑回归
1、算法概述
# -*— coding:utf-8 -*-
# @time :2021/11/5 17:01
# @Author :zhangzhoubin
'''
1、爬虫:又称网页蜘蛛,是将网页数据按照需要进行抽取,存储到本地数据库中,用于我们构建模型进行数据分析,获取数据中所需的价值。
2、web与http协议的工作流程:
客户端浏览器---url---远程服务器 (超文本传输协议http,客户端通过超文本传输协议对于远程服务器进行请求,服务器端对于请求进行响应)
3、爬虫的流程
(1)确定需求;(2)寻求需求;(3)发送请求;(4)解析数据;(5)存储数据
4、请求方式
get:get是http默认的请求该方式,直接通过链接进行访问,链接中直接附带 相关的参数;缺点:参数直接暴露在链接中,不安全;
post:post方法主要向web提交表单数据,涉及向服务器提交表单的过程,一般采购post请求;优势:相比get请求安全,参数信息不再链接中。
5、Requests
request是Python代码请求的工具。
'''
'''
功能:利用requests进行访问链接,获取所需的信息。
'''
# import requests
# #requests请求网站
# url='https://www.baidu.com/'
# res=requests.get(url=url) #发起get请求
# print(res) #获取相应的结果
# print(res.content) #获取相应的内容(b'.....':二进制的文本流)
# print(res.content.decode('utf-8')) #将二进制文本流转换成utf-5
# print(res.url) #请求的链接
# print(res.text) #响应的内容
# print(res.headers) #响应头信息
# print(res.request.headers) #响应头信息()
# print(res.status_code) #响应的状态码
'''
功能:发送请求,主要解决远程服务器拒绝爬虫工具访问,
'''
# import requests
# # url='https://www.lmonkey.com/'
# url='https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_f05509cc4e6744568d6ff57a3919bfbc'
#
# '''res=requests.get(url=url) 访问远程服务器是以python访问的(爬虫工具访问),如果远程服务器允许访问则返回的是200,如果拒绝访问则返回其他,
# 并且访问不到任何内容。
# 基于以上存在的问题,主要的原因是'User-Agent': 'python-requests/2.26.0'导致的,有些网页限制爬虫,就需要采用浏览器的方式访问,
# 格式如:user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
# '''
# #拒绝访问的解决方法
# # headers={
# # 'User-Agent':'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
# # ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
# # }
# # res=requests.get(url=url,headers=headers)
#
# res=requests.get(url=url)
# print(res.request.headers)
# #获取响应状态码
# sta_coda=res.status_code
# print(sta_coda)
# if sta_coda==200:
# with open('./test.html','w',encoding='utf-8') as fp:
# fp.write(res.text)
# '''
# 功能:post发送请求,requeests 请求头的定义,可以避免网页对于爬虫的限制,通过伪装为浏览器的方式顺利访问。
# '''
# import requests
# #定义请求URL
# url='https://fanyi.baidu.com/?aldtype=16047#auto/zh'
# #定义头文件
# headers={
# 'User-Agent':'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
# ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
#
# }
# #post发送数据
# data={'k':'您好'}
# #发送请求
# res=requests.post(url=url,headers=headers,data=data)
# #接收返回数据
# print(res.status_code)
# print(res.content)
'''
coookie:http请求是无状态请求,不会记住用户的状态和信息,也不清楚用户之前访问过什么,但是网站需要记住用户是否登记时,就需要在用户登录后
创建一些信息,并且 要把这些信息记录在当前的用户的浏览器中记录的内容就是cookie,用户继续使用当前网站时,浏览器就会主动携带这个网站设置的cookie信息
cookie会在浏览器中记录信息,并且在访问时携带这个信息。浏览器更换或者删除cookie信息将丢失,cookie在浏览器中记录信息是不安全,因为不能记录敏感信息。
session:是在服务器端进行数据的记录,并且在给每个用户会生成一个sessionID,并且把这个sessionID设置在和用户的浏览器中,也就是设置为cookie
'''
'''
功能:使用cookie记录的信息进行网页访问
'''
# import requests
#
# url='https://www.imooc.com/'
# #定义头文件
# headers={
# 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36''AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
# }
# res=requests.get(url=url,headers=headers)
# if res.status_code==200:
# print("请求成功")
# with open('./train.html','w',encoding='utf-8') as fp:
# fp.write(res.text)
# print("响应成功")
'''
XPath是XML路径语言,主要用于在XML文档中查找信息的语言,最初主要用于搜寻XML文档中,同时也适用于HTML文档中搜索资源,因此可以
用于爬虫时对于信息的抽取。
XPath常用规则:
nodename:选取此节点的所有子节点;
/ :选取当前节点的直接子节点;
// :选取当前节点的子孙节点;
. :选取当前节点;
.. :选取当前节点的父节点;
@ :选取属性
'''
'''
功能:XPath基本使用
'''
# from lxml import etree
# text='''
# <!DOCTYPE html>
# <html lang='zh-CN'>
# <head>
# <meta charset="UTF-8">
# <title>学习猿地-成就自我</title>
# <head>
# <body>
# <ul>
# <li><a href="/a/b/c/java/">java工程师</a></li>
# <li><a href="/a/b/c/python/">python工程师</a></li>
# <li><a href="/a/b/c/ai/">AI工程师</a></li>
# </ul>
# </body>
# </html>
# '''
# #使用etree解析html字符串
# html=etree.HTML(text)
# print(html)
# #提取数据
# r=html.xpath('/html/body/ul/li/a/text()')
# print(r) #['java工程师', 'python工程师', 'AI工程师']
# #获取xpath中多个子节点中一个子节点的信息
# r1=html.xpath('/html/body/ul/li[2]/a/text()')
# print(r1) #['python工程师']
'''
功能:xpath的使用方式
'''
from lxml import etree
#第一种解析的方法
# with open('./test1.html','r',encoding='utf-8') as rf:
# content=rf.read()
# html1=etree.HTML(content)
# res1=html1.xpath('/html/body/ul/li/a/text()')
# print(res1)
# # #第二种解析的方法
# res2=etree.parse('./test1.html',etree.HTMLParser())
# res=res2.xpath('/html/body/ul/li/a/text()')
# print(res)
# #获取指定标签下的数据
# res2=etree.parse('./test1.html',etree.HTMLParser())
# # res=res2.xpath('//ul[@class="student"]/li/a[@re="/a/b/c/python/"]/text()')
# # print(res)
# #获取属性的名字
# res=res2.xpath('//ul[@class="student"]/li[1]/a/@re')
# print(res)
'''
功能:Xpath实战,实现 网站登录
'''
'''
自动登录网站的流程:
1)get请求login页面,设置cookie,获取_token
2)post请求,提交登录数据,进行登录,并且设置cookie
3)get请求,账户中心,获取默认的订单号
'''
# import requests
# from lxml import etree
#
# class LMonKey():
# loginurl='https://www.lmonkey.com/login'
# orderurl='https://www.lmonkey.com/my/order'
# headers={
# 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
# }
# #请求对象
# req=None
# _token=''
# order_code=0
# #请求初始化
# def __init__(self):
# self.req=requests.sessions()
# if self.getlogin():
# if self.postlogin():
# self.getorder()
#
# #get登录页面,获取_token
# def getlogin(self):
# #get请求login,设置cookie,获取_token
# res=self.req.get(url=self.loginurl,headers=self.headers)
# if res.status_code==200:
# print('get请求成功')
# html=etree.HTML(res.text)
# self.token=html.xpath('//input[@name="_token"]/@value')[0]
# print(self.token)
# print("token获取成功")
# return True
# else:
# print("请求错误")
#
# #post请求登录,设置cookie
# def postlogin(self):
# uname=input("手机号")
# passw=input("密码")
# data={
# '_token':self.token,
# 'username':uname,
# 'password':passw
# }
# #发送post请求
# res=self.req.post(url=self.loginurl,headers=self.headers,data=data)
# if res.status_code==200 or res.status_code==302:
# print("登录成功")
# return True
# #get请求账户中心,获取边订单号
# def getorder(self):
# pass
# res=self.req.get(url=self.orderurl,headers=self.headers)
# if res.status_code==200:
# print("账户中心请求成功,正在解析数据")
# html=etree.HTML(res.text)
# r=html.xpath('//div[@class="avatar-content"//small/text()]')
# self.order_code=r
# print(r)
# return True
#
#
# obj=LMonKey()
'''
xpath实战,爬取文章
'''
#导入所需库
import requests,json
from lxml import etree
def data_get():
#请求链接
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/95.0.4638.69 Safari/537.36'
}
#发送请求
res=requests.get(url=url,headers=headers)
if res.status_code==200:
print("请求成功")
with open('./yz.html','w',encoding='utf-8') as fp:
fp.write(res.text)
filepath='./yz.html'
return filepath
def data_slove(filepath):
#解析数据
html=etree.parse('./yz.html',etree.HTMLParser())
#提取数据 文章标题、文章地址url
title=html.xpath('/html/body/div[12]/div/div/main/div[3]/div[1]/div/div[2]/h2/a/span/span/text()')
auter=html.xpath('/html/body/div[12]/div/div/main/div[3]/div[1]/div/div[1]/div/div[2]/p/a/span/span/text()')
auters=[]
#对于数据的清洗
for i in auter:
auters.append(i.strip())
print(auters)
data=html.xpath('/html/body/div[12]/div/div/main/div[1]/div[2]/div[1]/div/div[2]/a/time/span/span/text()')
a=zip(title,auters,data)
content=[]
for i,j,k in a:
print()
b={"标题":i,'作者':j,'日期':k}
content.append(b)
print(content)
return content
def data_write(content):
with open('./data.json','w',encoding='utf-8') as fp:
fp.write(json.dumps(content))
print("数据加载完成!")
if __name__=='__main__':
file_path=data_get()
content=data_slove(file_path)
data_write(content)