爬虫工作流程、请求与响应原理、requests库讲解

news2024/11/30 10:30:33

爬虫工作流程、请求与响应原理、requests库讲解

爬虫分类主要分为两大板块

  • web爬虫(浏览器爬虫)

  • APP爬虫(手机端爬虫)

在这两大板块中又可以把爬虫归类为聚焦爬虫和通用爬虫

  • 聚焦爬虫:针对某一个接口(url)抓取 -使用requests第三方库

  • 通用爬虫:针对搜索引擎(百度,bing等)-使用scrapy、scrapy-redis框架

网络爬虫的基本工作流程

  • 首先序言去一部分精选挑选的种子url

  • 将这些url放入待抓取的url队列

  • 从待抓取的url队列中取出待抓取的url,解析DNS,并且得到主机的ip,并将url对应的网页下载下来,存储进一下载网页库中。此外,见这些URL放进已抓取url队列

  • 分析已抓取url队列中的URL,分析其中的其他URL,并将URL放入待抓取url队列,进入下一个循环

在这里插入图片描述

📌也可以这么描述四步基础流程:1.请求目标链接;2.获取响应内容;3.解析内容;4.存储数据;下面分别进行简单描述:

1.请求目标链接

发起一个带有header、请求参数等信息的Request,等待服务器响应;

2.获取响应内容

服务器正常响应后,Response的内容即包含所有页面内容(可以是HTML、JSON字符串、二进制数据(图片、视频)等等)

3.解析内容

得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析;可能是Json字符串,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理……

4.存储数据

存储形式多样,可以存为文本,也可以存储到数据库,或者存为特定格式的文件;

下载安装requests工具包

我们在pycharm的Terminal终端,或者Anaconda终端可以运行

pip install requests

主要下载了一些依赖包

在这里插入图片描述

请求与响应

HTTP由两部分组成:请求与响应

在这里插入图片描述

客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

在这里插入图片描述

📌爬虫中的请求:构造请求头→防止反爬(就是代码 请求失败)

我们要了解其中的请求方式、请求地址、请求头

下面给出一个网址中的请求

在这里插入图片描述

请求头hearder = {
Accept:请求数据类型(浏览器支持格式)
Accept-Encoding:请求数据的编码
Connection:链接方式
Cookie:在浏览器中的用户信息
Host:主机地址
User-Agent:浏览器类型(电脑信息、浏览器信息)
Referer:防盗链接(请求一个网站,验证你是从哪里来的)
}

请求方式:HTTP请求可以使用多种请求方法

在这里插入图片描述

GET和POST方法区别归纳如下几点:

  • GET是从服务器上获取数据,POST是向服务器传送数据。

  • GET请求参数显示,都显示在浏览器网址上,POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送

  • 尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post好。

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE.

一个URL地址用于描述一个网络上的资源.而HTTP中的GET,POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

服务器的响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

在这里插入图片描述

爬虫中的响应:
数据:HTML、JS、CSS
响应头

响应状态码可以看一下这个blog

响应状态码

requests工具包

使用下面的代码进行导入

#导入requests库
import requests

一些常用的命名

requests.Request()  # 请求类
requests.request()  # 请求函数
requests.get()  # 常用 session.request
session.request(实例) # 实例

最常用的命令是,我们可以通过help查看

#发送一个get请求并得到响应
r = requests.get('https://www.baidu.com')
help(requests.get) 

在这里插入图片描述

在这里插入图片描述

我们可以看到使用get()函数,传递的参数

通过print操作还可以返回状态码,或者一些其他的操作


# ----------------------------------
#发送一个get请求并得到响应
r = requests.get('https://www.baidu.com')
#查看响应对象的类型
print(type(r))
#查看响应状态码
print(r.status_code)
#查看响应内容的类型
print(type(r.text))
#查看响应的内容
print(r.text)
#查看cookies
print(r.cookies)

我们通过解析可以返回的数据:text (返回字符串,不带解码功能)、 content(返回16进制数据) 、 content.decode() 、json,包括状态码、请求头等相关参数的反馈

​这里调用了get( )方法实现urlopen( )相同的操作,结果返回一个响应对象,然后分别输出响应对象类型、状态码、响应体内容的类型、 响应体的内容、Cookies。通过运行结果可以得知:响应对象的类型是requests.models.Response,响应体内容的类型是str,Cookies 的类型是RequestCookieJar。如果要发送其他类型的请求直接调用其对应的方法即可:

  • 返回状态码
url = 'https://www.bilibili.com/'
print(requests.get(url))
# -----------------------
# 运行结果
<Response [200]>
  • 返回响应内容(text、content.decode)
print(requests.get(url).text)
# -----------------------
# 运行结果
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><title>哔哩哔哩 (-)つロ 干杯~-bilibili</title><meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。大家可以在这里找到许多欢乐。"><meta name="keywords" content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃"><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="spm_prefix" content="333.851"><meta name="referrer" content="no-referrer-when-downgrade"><meta name="baidu-site-verification" content="code-qkzzf7NQkQ"><meta name="applicable-device" content="pc"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><link rel="canonical" href="https://www.bilibili.com/"><link rel="alternate" media="only screen and(max-width: 640px)" href="https://m.bilibili.com"><link rel="dns-prefetch" href="//s1.hdslb.com"><link rel="apple-touch-icon" href="//static.hdslb.com/mobile/img/512.png"><link rel="shortcut icon" href="/favicon.ico?v=1"><script type="text/javascript">function getIEVersion(){var e=99;if("Microsoft Internet Explorer"==navigator.appName){var t=navigator.userAgent;null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(t)&&(e=parseFloat(RegExp.$1))}return e}getIEVersion()<11&&(window.location.href="https://www.bilibili.com/blackboard/activity-I7btnS22Z.html")</script><script type="text/javascript">!function(){var i=window.navigator.userAgent,n=["Android","iPhone","SymbianOS","Windows Phone","iPod"],o=!0;if(!/\sVR\s/g.test(i)){for(var e=0,r=n.length;e<r;e++)if(0<i.indexOf(n[e])){o=!1;break}if(!o){var a=window.location.href.replace("www","m");window.location.href=a}}}()</script><script type="text/javascript">function getCookie(e){var o=new RegExp("(^| )"+e+"=([^;]*)(;|$)"),n=document.cookie.match(o);return n?unescape(n[2]):null}function reportfs(){window.performance&&window.performance.timing&&(window.performance.timing.firstscreenfinish=(new Date).getTime())}window.spmReportData={},window.reportConfig={sample:1,scrollTracker:!0,msgObjects:"spmReportData",errorTracker:!0},window.abtest||(window.abtest={}),window.abtest.b_ut=getCookie("b_ut"),window.abtest.i_wanna_go_back=getCookie("i-wanna-go-back"),window.page_load_time=Date.now()</script><link rel="prefetch" as="script" href="//s1.hdslb.com/bfs/static/player/main/video.js?v=20221123"><script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/short/config/biliconfig.js"></script><script type="text/javascript" src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/long/js/sentry/sentry-5.7.1.min.js"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/long/js/sentry/sentry-5.7.1.vue.min.js"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/seed/log/report/log-reporter.js" crossorigin></script><link href="//s1.hdslb.com/bfs/static/jinkela/international-home/css/international-home.1.2184757120b051b37234cf788f278baae5395301.css" rel="stylesheet"><link href="//s1.hdslb.com/bfs/static/jinkela/international-home/css/international-home.0.2184757120b051b37234cf788f278baae5395301.css" rel="stylesheet"></head><body><div id="international-home-app"></div><div id="biliMainFooter"></div><script type="text/javascript" src="//s1.hdslb.com/bfs/cm/cm-sdk/static/js/pc.js"></script><div style="display:none"><a href="https://www.bilibili.com/v/game/match/">赛事库</a> <a href="https://www.bilibili.com/cheese/">课堂</a> <a href="https://www.bilibili.com/festival/2021bnj">2021拜年纪</a></div><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/international-home/1.international-home.2184757120b051b37234cf788f278baae5395301.js"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/international-home/international-home.2184757120b051b37234cf788f278baae5395301.js"></script></body></html>
print(requests.get(url).content.decode('utf-8')) #这个也能完成相同操作
# -----------------------
# 运行结果
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><title>哔哩哔哩 (-)つロ 干杯~-bilibili</title><meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。大家可以在这里找到许多欢乐。"><meta name="keywords" content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃"><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="spm_prefix" content="333.851"><meta name="referrer" content="no-referrer-when-downgrade"><meta name="baidu-site-verification" content="code-qkzzf7NQkQ"><meta name="applicable-device" content="pc"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><link rel="canonical" href="https://www.bilibili.com/"><link rel="alternate" media="only screen and(max-width: 640px)" href="https://m.bilibili.com"><link rel="dns-prefetch" href="//s1.hdslb.com"><link rel="apple-touch-icon" href="//static.hdslb.com/mobile/img/512.png"><link rel="shortcut icon" href="/favicon.ico?v=1"><script type="text/javascript">function getIEVersion(){var e=99;if("Microsoft Internet Explorer"==navigator.appName){var t=navigator.userAgent;null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(t)&&(e=parseFloat(RegExp.$1))}return e}getIEVersion()<11&&(window.location.href="https://www.bilibili.com/blackboard/activity-I7btnS22Z.html")</script><script type="text/javascript">!function(){var i=window.navigator.userAgent,n=["Android","iPhone","SymbianOS","Windows Phone","iPod"],o=!0;if(!/\sVR\s/g.test(i)){for(var e=0,r=n.length;e<r;e++)if(0<i.indexOf(n[e])){o=!1;break}if(!o){var a=window.location.href.replace("www","m");window.location.href=a}}}()</script><script type="text/javascript">function getCookie(e){var o=new RegExp("(^| )"+e+"=([^;]*)(;|$)"),n=document.cookie.match(o);return n?unescape(n[2]):null}function reportfs(){window.performance&&window.performance.timing&&(window.performance.timing.firstscreenfinish=(new Date).getTime())}window.spmReportData={},window.reportConfig={sample:1,scrollTracker:!0,msgObjects:"spmReportData",errorTracker:!0},window.abtest||(window.abtest={}),window.abtest.b_ut=getCookie("b_ut"),window.abtest.i_wanna_go_back=getCookie("i-wanna-go-back"),window.page_load_time=Date.now()</script><link rel="prefetch" as="script" href="//s1.hdslb.com/bfs/static/player/main/video.js?v=20221123"><script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/short/config/biliconfig.js"></script><script type="text/javascript" src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/long/js/sentry/sentry-5.7.1.min.js"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/long/js/sentry/sentry-5.7.1.vue.min.js"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/seed/log/report/log-reporter.js" crossorigin></script><link href="//s1.hdslb.com/bfs/static/jinkela/international-home/css/international-home.1.2184757120b051b37234cf788f278baae5395301.css" rel="stylesheet"><link href="//s1.hdslb.com/bfs/static/jinkela/international-home/css/international-home.0.2184757120b051b37234cf788f278baae5395301.css" rel="stylesheet"></head><body><div id="international-home-app"></div><div id="biliMainFooter"></div><script type="text/javascript" src="//s1.hdslb.com/bfs/cm/cm-sdk/static/js/pc.js"></script><div style="display:none"><a href="https://www.bilibili.com/v/game/match/">赛事库</a> <a href="https://www.bilibili.com/cheese/">课堂</a> <a href="https://www.bilibili.com/festival/2021bnj">2021拜年纪</a></div><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/international-home/1.international-home.2184757120b051b37234cf788f278baae5395301.js"></script><script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/international-home/international-home.2184757120b051b37234cf788f278baae5395301.js"></script></body></html>


  • 返回图像等响应内容

这里找了一张图像的链接地址,我们可以看到他的返回是一串16进制

url = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F2018-06-27%2F5b3345789ca2c.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672394670&t=14a6fb6eea7ec009b16745f4a56bb9ff'
print(requests.get(url,headers=headers).content)

在这里插入图片描述

  • 静态页面的反爬

打开F12,刷新页面之后找到User-Agent,可以对静态页面进行反爬

#  请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
print(requests.get(url,headers=headers).content.decode('utf-8'))

运用这种方法可以在pycharm中看到较为格式化的参数

在这里插入图片描述

  • request信息的返回

请求对象:requset.headers

print(requests.get(url,headers=headers).request.headers)
# 返回内容如下
{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

请求地址:request.url

print(requests.get(url,headers=headers).request.url)
# 返回内容如下
https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F2018-06-27%2F5b3345789ca2c.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1672394670&t=14a6fb6eea7ec009b16745f4a56bb9ff

请求方法:request.method

print(requests.get(url,headers=headers).request.method)
# 返回内容如下
GET
  • response信息返回

状态码:status_code

print(requests.get(url,headers=headers).status_code)
# 返回内容如下
200

响应头部:headers (与请求头部区分)

print(requests.get(url,headers=headers).headers)
# 返回内容如下
{'Server': 'JSP3/2.0.14', 'Date': 'Wed, 30 Nov 2022 10:17:49 GMT', 'Content-Type': 'image/jpeg', 'Content-Length': '111412', 'Connection': 'keep-alive', 'Expires': 'Mon, 26 Dec 2022 02:48:20 GMT', 'Last-Modified': 'Wed, 07 Jan 1970 00:00:00 GMT', 'ETag': '829a82d1de66e50d1fe6000f856e5d2f', 'Age': '265527', 'Accept-Ranges': 'bytes', 'Access-Control-Allow-Origin': '*', 'Ohc-Global-Saved-Time': 'Sat, 26 Nov 2022 02:48:20 GMT', 'Ohc-Upstream-Trace': '36.156.185.60', 'Ohc-Cache-HIT': 'sq2cm60 [2], csix73 [2]', 'Ohc-Response-Time': '1 0 0 0 0 0', 'Ohc-File-Size': '111412', 'X-Cache-Status': 'HIT', 'Timing-Allow-Origin': '*'}

浏览器信息:cookies 返回的是一种cookies对象而不是浏览器中的值

print(requests.get(url,headers=headers).cookies)
# 返回内容如下
<RequestsCookieJar[]>

返回请求方法:request

print(requests.get(url,headers=headers).request)
# 返回内容如下
<PreparedRequest [GET]>

返回编码方式:encoding

url = 'https://www.baidu.com/'
print(requests.get(url,headers=headers).encoding)
# 返回内容如下
utf-8

一些关于requests的更具体的应用我们可以看下面的文章

requests应用

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

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

相关文章

对话框被遮罩层挡住

element-ui 解决方法一&#xff1a; 在el-dialog中写去掉遮罩层 :modal"false" 解决方法二&#xff1a; 在el-dialog中写&#xff08;遮罩层是否插入至 body 元素上&#xff0c;若为 false&#xff0c;则遮罩层会插入至 Dialog 的父元素上&#xff09; :modal-ap…

[附源码]SSM计算机毕业设计医院挂号系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

专业硕士招生占比将达到三分之二,那么跟学术硕士有哪些区别?

近年来的研究生招生考试中&#xff0c;专业硕士的招生培养规模正稳步增长。据统计&#xff0c;2009年专业学位硕士招生人数在硕士招生总人数中的占比仅为15.9%&#xff0c;其后在2017年首次超过学硕招生人数&#xff0c;到2020年专硕招生人数占比已超60%。国务院学位委员会、教…

SpringBoot - 集成Actuator(应用信息显示、修改系统日志、增加账号密码登录)

文章目录Actuator概述官网入口支持的埋点信息查询、修改使用访问actuator埋点信息添加账号密码登录验证动态修改日志级别Actuator 概述 官网入口 官网&#xff1a; https://docs.spring.io/spring-boot/docs/2.7.6/reference/html/actuator.html#actuator.endpoints 支持的埋…

csdn中书写数学公式简单介绍

参考&#xff1a;https://www.zybuluo.com/codeep/note/163962#3%E5%9C%A8%E5%AD%97%E7%AC%A6%E9%97%B4%E5%8A%A0%E5%85%A5%E7%A9%BA%E6%A0%BC 常识、常用 一行公式使用$$开始和结尾&#xff0c;常用符号表示 符号功能$$多行公式的开始和结尾&#xff0c;一个$表示单行公式开…

Cisco ASA基础——安全算法与基本配置

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 本章重点 一.Cisco防火墙简介 1.什么是防火墙 2.防火墙的作用…

PHP表单处理的案例分析

目录 知识补充 实现过程 前端代码 后端代码 简单分析 知识补充 表单简介&#xff08;来自Mr._Dang&#xff09; action&#xff1a;提交的地址 method&#xff1a;提交的方式 get&#xff1a; 参数是在url中的&#xff0c;不安全&#xff0c;传输量比较少&#xff…

[附源码]Python计算机毕业设计Django的在线作业批改系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]Python计算机毕业设计SSM力高灯饰线上交易平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

一言不合就重构

hello&#xff0c;大家好呀&#xff0c;我是小楼。 前段时间不是在忙么&#xff0c;忙的内容之一就是花了点时间重构了一个服务的健康检查组件&#xff0c;目前已经慢慢在灰度线上&#xff0c;本文就来分享下这次重构之旅&#xff0c;也算作个总结吧。 背景 服务健康检查简介…

短视频创作,变现的建议、变现方式和举例,建议收藏反复阅读-上

先说今天的纲要&#xff0c;有兴趣可以继续看下去&#xff0c;今天主要针对短视频变现这件事的讨论&#xff0c;有三个建议&#xff0c;①变现标准低、②变现天花板高、③可主动变现。 我们在选择变现形式的时候&#xff0c;尽可能满足这三个条件或其中两个。 中间我们再讨论下…

【LeetCode】895.最大频率栈

题目描述 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。void push(int val) 将一个整数 val 压入栈顶。int pop() 删除并返回堆栈中出现频率最高的元素。 如果出现…

【问题思考总结】NAT的公有地址怎么转换为私有地址?【MAC地址和IP地址的转换】

问题起源 在做一道题的时候&#xff0c;涉及到了由内网到外网再到内网时的IP地址转换。在外网的时候&#xff0c;答案说的是不能够用私有IP地址作为源IP地址&#xff0c;然后疑问产生了&#xff1a;如果不能用私有IP地址作为目的地址&#xff0c;他又怎么能够找到那个主机呢&a…

[附源码]Python计算机毕业设计SSM乐多多宠物店网站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022年11月30日 Fuzzy C-Means学习笔记

​ Fuzzy C-Means 模糊c均值聚类&#xff0c;它的一大优势就是引入了一个隶属度的概念&#xff0c;没有对样本进行非黑即白的分类&#xff0c;而是分类的时候乘上隶属度&#xff0c;直白点说就是他和某个中心有多像&#xff0c;到底是40%像还是70%像。 ​ 参考&#xff1a;在众…

CF27E (2000) (反素数)

https://codeforces.com/contest/27/problem/E 反素数&#xff1a; 若N < 2 ^ 31 引理1&#xff1a; 1 ~ N 中的反素数&#xff0c;就是 1 ~ N中约数个数最多的数中 最小 的一个。 引理2&#xff1a; 1 ~ N 中任何数的不同质因子都不会超过 10 个且所有质因子的质数都不会超…

真题集P91---2018年计专真题

真题集P91---2018年计专真题三(2)自由树直径思路代码四思路代码五思路代码三(2)自由树直径 思路 1、吉大出的题目&#xff0c;没规定是否是有权图&#xff0c;以及是否是有向图&#xff0c;所以这里默认&#xff0c;权值是1的无向图。 1、如果权值都一样&#xff0c;用邻接表存…

[附源码]Python计算机毕业设计Django的疫苗接种管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

AI绘画怎么操作

ai绘画的4个途径 1.小程序意间ai绘画 需要排队可以多用一点积分换vip通道会快一点,还有就是凌晨两三点的时候快 我一般是图5那样的参数,横图4:3 竖图3:4 2.draft.art网站AI绘画 直接用手机浏览器搜就可以,搜出来就是图6那样的界面点下面蓝色按钮,我是用的🍎自带的浏览…

精品基于JAVA的医院挂号系统的设计与实现SSM

《基于JAVA的医院挂号系统的设计与实现》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 前端技术&#xff1a;JavaScript、VUE.js&#xff08;2.X&#xff09;、css3 JDK版…