「滴滴滴,老司机开车了」Nodejs 爬取煎蛋网妹子图
“流氓不可怕,就怕流氓有文化”
前天刚考完编译,今天考完网络,就开始捣鼓代码了,花了一天时间摸索了一下
nodejs
的爬虫,也就是tcp
,http
连接。
也是就做了一个爬取煎蛋网妹子图的爬虫,并保持至本地。
思路介绍
通过
http请求报文
模拟一次访问煎蛋网的操作获取到了网页的HTML代码后,进行正则表达式匹配,得到图片地址
通过图片地址,再次发送
http请求报文
,将图片数据保存至本地
思路简单了解后,便开始工作了。
然而并不是一帆风顺
得不到HTML
?
参考资料http://chenxi.name/60.html,利用request
包进行傻瓜式调用,然而并不能生效,将会跳转至一个屏蔽提示网页
煎蛋网为了防止恶意爬取数据,进行了一定程度的防爬措施。但这可难不倒我,为什么在浏览器上就能正常浏览图片页面呢?
于是我打开浏览器控制台,复制页面请求报文的cmd格式,粘贴至命令行中运行,能够正确得到HTML
。
所以,我觉得问题就是出现在请求报文头部数据,于是复制下浏览器中报头,利用nodejs
的http
包,建立http连接。
require('http').get({hostname:'jandan.net',path:'/',header:{...}},function(res){})
但是奇怪的是!还是响应302,跳转至屏蔽提示页面。
最后没办法的我只好利用底层一点的api——net
包,建立tcp连接,发送符合http请求报文
格式的数据。
var net = require('net');
var header = require('fs').readFileSync('./header.txt').toString();module.exports = function (path,callback) {const socket = net.createConnection(80,'jandan.net');socket.write('GET '+path+' HTTP/1.1\r\n'+header);socket.setEncoding('utf-8');socket.setTimeout(4000,function () {callback(html);console.error(new Error('Time OUT'));socket.end();});var html = '';socket.on('data',function (chunk) {html+=chunk;});socket.on('end',function () {console.log('disconnected from server');});
}
header.txt
Host: jandan.net
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Referer: http://jandan.net/v
Accept-Language: zh-CN,zh;q=0.8
Cookie: gif-click-load=on; bad-click-load=on; PHPSESSID=u1gnmqnpb75injakbgvkb6r413; 4036050675=c119Yp%2BLrMWuv%2BWMyYtq3x6vTdbFzaTbUyoiLt%2Fv; jdna=596e6fb28c1bb47f949e65e1ae03f7f5#1467288596467; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1467287791; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1467288598; _ga=GA1.2.330681373.1467287790
注意,header.txt最后需要两个\r\n
表示请求报头结束。最后果然是成功了,但具体两种方法的不同我也说不上来,希望有热心读者能告诉我。
数据传输同步异步?
利用下面的递归方法加上Promise.all
同步方法,防止过度的tcp连接(改用下面方法后,tcp读写错误明显减少,但还是会出现,不知道有没有大神帮我解决该问题呢?)
function run(i,low) {if(i<low) return;spider('/ooxx/page-'+i,function (html) {var images = [];html.replace(/<img.+?src="(http.+?sina.+?)"/g,function (m,c) {images.unshift(c);});var page = i;var proms = images.map((x,i,a)=>{return new Promise((resolve,reject)=>{var req = http.get(x,function (res) {res.on('error',function (err) {console.error(err);resolve('fail');});var filename = x.substr(x.lastIndexOf('/')+1);download(dir+'/'+filename,res);console.log('PAGE:'+page+'...'+filename+'...'+(i+1)+'/'+a.length);resolve('done');}).end();});});Promise.all(proms).then((values)=>{//上一页的图片加入下载队列后,再开始递归下一页。run(i-1,low);});});
}
最后文件夹就像下面一样!
甩下代码地址,飙个车
jandan-spider
关注我的博客moyuyc.github.io ,有技术的老司机带你飙车!
相关文章
- 使用 Flash Builder 的 Apple iOS 开发过程
使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前,必须…...
2023/3/16 19:40:03 - exchange日常管理之九:升级SP1后的灾难恢复
将exchange 2007升级到了exchange 2010,但是没有打最新的SP1补丁和累积更新,没想到这补丁一打就出问题了,汗了一把啊。 升级过程摘要 1、在前端服务器和后端服务器上安装microsoft office filter pack 2.0 2、停掉后端的beremote备份进程 3…...
2023/3/16 17:29:51 - iOS开发 - js oc相互调用
2019独角兽企业重金招聘Python工程师标准>>> 首先导入 JavaScriptCore.framework 框架 #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <JavaScriptCore/JavaScriptCore.h>protocol ServerJSProtocol <JSExport>// 微…...
2023/3/16 6:11:48 - git学习之创建版本库
创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪…...
2023/3/16 5:38:29 - List集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算。例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的type属性进行分组,计算money的总和。有以下两种思路: …...
2023/3/18 2:30:34 - 游戏编程性能优化--------------------------------------------------------------------------------------...
游戏编程性能优化------------------------------------------------------------------------------------------- 1.全局变量名尽量用缩写,尽可能短,可以减小程序最终生所的体积 2.for循环在较大的循环空间,写成几个循环,以利用…...
2023/3/16 12:35:44 - 2017年软件工程作业-“Hello World!”团队互评beta版本
A.欢迎来怼——博客园安卓APP(测评人:刘淑霞) 博客地址:http://www.cnblogs.com/liusx0303/p/7905928.html B.Thunder——爱阅app(测评人:方铭) 博客地址:http://www.cnblogs.com/…...
2023/3/16 12:07:11 - ibatis 批量插入逻辑
为什么80%的码农都做不了架构师?>>> ibatis oracle 批量插入配置 <!--批量新增--><insert id"CreateLawStatisticsClassifyBatch" parameterClass"ArrayList">insert into T_LAW_STATISTICS_CLASSIFY(ID,TEMPLATE,ALIA…...
2023/3/16 5:39:32 - secureCRT免密码登陆Linux
转自:http://blog.csdn.net/wangquannetwork/article/details/46062675 1.实现原理: 通过CRT生成的密钥对,把公钥上传到Linux服务器指定用户下的.ssh目录中,在客户端上只需输入秘钥的密码即可登陆,而且验证一次以后可以…...
2023/3/16 11:10:31 - PP代码生成器(二) 解决方案, 生成任务, 辅助设计面板
我们接着上一篇博客继续讨论如何使用PP生成代码. 首先, 我们介绍两个概念”解决方案”和 “生成任务”. 解决方案: 解决方案是一系列生成任务的集合. 它包含若干个生成任务.生成任务: 每个任务会关联一个freemarker模板, 最终会使用这个模板来生成一个结果文件解决方案和任务的…...
2023/3/16 10:41:54 - 函数的运用二(一个一个字读,便于学会机率)
看完前篇的函数运用是不是不在疑惑,那么下面就来点复杂一点的,也不难的。 如下图所示:读绿色和黄色注释。 是不是能写出来了,调用函数的方式,都是一样的。跟上面前篇的调用几乎一样的,不同就是函数名不同而…...
2023/3/24 2:33:26 - 困扰你的Git操作?
前端学习笔记篇之git那些事 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。学习前端,离不开Git的使用,面试时也是一个常考的话题,在日常开发中,也困扰我们许久,下面就让…...
2023/3/24 2:33:28 - ArrayList和LinkedList的区别
2019独角兽企业重金招聘Python工程师标准>>> ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。 LinkedList使用了…...
2023/3/16 17:29:27 - Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程...
在上篇随笔《Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示》中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的《winform开发框架》的基础上进行CRM系统模块的开发工作,希望对大家在系统模块开发…...
2023/3/16 5:37:14 - shell 日期加减运算
比如今日是2012-04-22$ date -d "1 day" %Y-%m-%d2012-04-23$ date -d "-1 day" %Y-%m-%d2012-04-21$ date -d "2012-04-10 -1 day " %Y-%m-%d2012-04-09$ date -d "2012-04-10 1 day " %Y-%m-%d2012-04-11$ date -d "-1 week &q…...
2023/3/15 19:12:30 - PHP 字符串替换 substr_replace 与 str_replace 函数
PHP 字符串替换 用于从字符串中替换指定字符串。 相关函数如下: substr_replace():把字符串的一部分替换为另一个字符串 str_replace():使用一个字符串替换字符串中的另一些字符substr_replace() substr_replace() 函数用于把字符串的一部分替…...
2023/3/16 12:34:47 - Android开发者指南(12) —— Android Supported Media Formats
本文档描述了Android平台支持的媒体播放解码器、网络协议。 作为一名应用软件开发者,你可以自由使用平台上的媒体解码器,这些编解码可以是平台提供,或者是特定设备支持。然而,最好习惯于使用媒体编码配置信息使得应用软件代码编写…...
2023/3/16 12:06:17 - Quartz.NET
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对…...
2023/3/16 11:38:32 - java算法-递归算法
2019独角兽企业重金招聘Python工程师标准>>> 不废话直接上代码 public class maxtest {public static void main(String[] args) {//###################阶乘递归算法start###################//System.out.println(f(5));//###################阶乘递归算法start##…...
2023/3/16 11:09:32 - Lifecycle-library-stable
Google 最近发布了稳定Lifecyclelibrary。笔者认为:如果你正在使用alpha或者beta版本,以下内容可能对你有用。 Deprecated LifecycleActivity 在stable version 1.0.0 之前,LifeCycle Library 并没有实现 LifecycleOwner这个接口,…...
2023/3/16 10:41:08 - 数据结构——哈希表
前言 使用哈希表可以进行非常快速的查找操作。但是,哈希表究竟是什么玩意儿?很多人避而不谈,虽然知道经常用到,很多语言的内置数据结构像python中的字典,java中的HashMap,都是基于哈希表实现。但哈希表究竟…...
2023/3/16 10:14:40 - Bootstrap~Panel和Table
在我们对一个页面进行设计时,分块是必须的,没有一个网站是一栏而下的,除非你是在看小说,否则你的页面设计一定是分块的,即它由于多个panel组件,在bootstrap里叫到栅格系统,而在每行每列进行宏观…...
2023/3/16 6:40:03 - pyspider操作千万级库,pyspider在对接量级较大库的策略
pyspider操作千万级库,pyspider在对接量级较大库的策略 如果是需要pyspider正常的流程去执行,那必然是会在on_strat()时任务执行超时,可能只读取出几万条或十几万条数据就会被破终止,然后执行index_page(),由于这个超时…...
2023/3/16 6:09:47 - Js+MVC~公用API的设计,返回jsonp后使ajax的error属性生效!
相关知识说明 项目用公用的API事实上就是其它子项目,包括非子项目需要从这个项目中得到一个公用的信息,这种产生信息的接口我们称为公用的API(application program interface)&#…...
2023/3/16 8:48:42 - 【CentOS 7笔记51】,screen虚拟终端#171207
2019独角兽企业重金招聘Python工程师标准>>> hellopasswd screen工具 为了不让一个任务意外终端nohup command &screen是一个虚拟终端yum install -y screenscreen直接回车就进入了虚拟终端ctral a组合键再按d退出虚拟终端,但不是结束screen -ls查看…...
2023/3/16 0:46:40 - 行内元素和块级元素(转)
行内元素和块级元素 2013-01-05 11:40 by greenal, 88623 阅读, 3 评论, 收藏, 编辑 1 块级元素:div , p , form, ul, li , ol, dl, form, address, fieldset, hr, menu, table行内元素:span, strong, em, br, img , input, label…...
2023/3/16 12:33:43 - 微信JSApi支付~坑和如何填坑
微信一直用着不爽,这几天研究它的jsapi支付,即在微信内打开H5页面,完成支付的过程,在这个过程中,你将会遇到各种各样的问题,而大叔将把这些问题的解决方法写一下,希望可以给你带来帮助ÿ…...
2023/3/16 12:05:20 - 阿里云ECS服务器Linux环境下配置php运行环境
阿里云ECS服务器Linux环境安装配置PHP的运行环境,不同于window操作系统下配置,因为是linux操作系统主要是在命令窗体里输入命令来操作,对于初次接触过linux系统的可能会有点怕怕的,下不去手。。。。。。 需要安装的软件有Apacheph…...
2023/3/16 0:45:51 - vim文本编辑器和yum的搭建
rpm -ivh 软件名-版本信息-.rpm (安装软件) rpm -q 软件名 (查看软件是否安装) rpm -e 软件名 (卸载转件) 因为rpm有依赖关系而yum刚好解决此问题 使用vim创建/修改文本文件 vim文本编辑器 命…...
2023/3/16 13:02:32 - sql developer 连接oracle错误一例(ORA-12505)
Oracle安装于VM中用sql developer连接oracle报ORA-12505再三检查lsnrctl status,不得正常后来再发现是oracle instance没有启动。转载于:https://blog.51cto.com/9882derek/2049088...
2023/3/16 13:02:32
最新文章
- 使用 Flash Builder 的 Apple iOS 开发过程
使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前,必须…...
2023/3/16 19:40:03 - exchange日常管理之九:升级SP1后的灾难恢复
将exchange 2007升级到了exchange 2010,但是没有打最新的SP1补丁和累积更新,没想到这补丁一打就出问题了,汗了一把啊。 升级过程摘要 1、在前端服务器和后端服务器上安装microsoft office filter pack 2.0 2、停掉后端的beremote备份进程 3…...
2023/3/16 17:29:51 - iOS开发 - js oc相互调用
2019独角兽企业重金招聘Python工程师标准>>> 首先导入 JavaScriptCore.framework 框架 #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <JavaScriptCore/JavaScriptCore.h>protocol ServerJSProtocol <JSExport>// 微…...
2023/3/16 6:11:48 - git学习之创建版本库
创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪…...
2023/3/16 5:38:29 - List集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算。例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的type属性进行分组,计算money的总和。有以下两种思路: …...
2023/3/18 2:30:34 - 游戏编程性能优化--------------------------------------------------------------------------------------...
游戏编程性能优化------------------------------------------------------------------------------------------- 1.全局变量名尽量用缩写,尽可能短,可以减小程序最终生所的体积 2.for循环在较大的循环空间,写成几个循环,以利用…...
2023/3/16 12:35:44 - 2017年软件工程作业-“Hello World!”团队互评beta版本
A.欢迎来怼——博客园安卓APP(测评人:刘淑霞) 博客地址:http://www.cnblogs.com/liusx0303/p/7905928.html B.Thunder——爱阅app(测评人:方铭) 博客地址:http://www.cnblogs.com/…...
2023/3/16 12:07:11 - ibatis 批量插入逻辑
为什么80%的码农都做不了架构师?>>> ibatis oracle 批量插入配置 <!--批量新增--><insert id"CreateLawStatisticsClassifyBatch" parameterClass"ArrayList">insert into T_LAW_STATISTICS_CLASSIFY(ID,TEMPLATE,ALIA…...
2023/3/16 5:39:32 - secureCRT免密码登陆Linux
转自:http://blog.csdn.net/wangquannetwork/article/details/46062675 1.实现原理: 通过CRT生成的密钥对,把公钥上传到Linux服务器指定用户下的.ssh目录中,在客户端上只需输入秘钥的密码即可登陆,而且验证一次以后可以…...
2023/3/16 11:10:31 - PP代码生成器(二) 解决方案, 生成任务, 辅助设计面板
我们接着上一篇博客继续讨论如何使用PP生成代码. 首先, 我们介绍两个概念”解决方案”和 “生成任务”. 解决方案: 解决方案是一系列生成任务的集合. 它包含若干个生成任务.生成任务: 每个任务会关联一个freemarker模板, 最终会使用这个模板来生成一个结果文件解决方案和任务的…...
2023/3/16 10:41:54 - 函数的运用二(一个一个字读,便于学会机率)
看完前篇的函数运用是不是不在疑惑,那么下面就来点复杂一点的,也不难的。 如下图所示:读绿色和黄色注释。 是不是能写出来了,调用函数的方式,都是一样的。跟上面前篇的调用几乎一样的,不同就是函数名不同而…...
2023/3/24 2:33:26 - 困扰你的Git操作?
前端学习笔记篇之git那些事 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。学习前端,离不开Git的使用,面试时也是一个常考的话题,在日常开发中,也困扰我们许久,下面就让…...
2023/3/24 2:33:28 - ArrayList和LinkedList的区别
2019独角兽企业重金招聘Python工程师标准>>> ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。 LinkedList使用了…...
2023/3/16 17:29:27 - Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程...
在上篇随笔《Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示》中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的《winform开发框架》的基础上进行CRM系统模块的开发工作,希望对大家在系统模块开发…...
2023/3/16 5:37:14 - shell 日期加减运算
比如今日是2012-04-22$ date -d "1 day" %Y-%m-%d2012-04-23$ date -d "-1 day" %Y-%m-%d2012-04-21$ date -d "2012-04-10 -1 day " %Y-%m-%d2012-04-09$ date -d "2012-04-10 1 day " %Y-%m-%d2012-04-11$ date -d "-1 week &q…...
2023/3/15 19:12:30 - PHP 字符串替换 substr_replace 与 str_replace 函数
PHP 字符串替换 用于从字符串中替换指定字符串。 相关函数如下: substr_replace():把字符串的一部分替换为另一个字符串 str_replace():使用一个字符串替换字符串中的另一些字符substr_replace() substr_replace() 函数用于把字符串的一部分替…...
2023/3/16 12:34:47 - Android开发者指南(12) —— Android Supported Media Formats
本文档描述了Android平台支持的媒体播放解码器、网络协议。 作为一名应用软件开发者,你可以自由使用平台上的媒体解码器,这些编解码可以是平台提供,或者是特定设备支持。然而,最好习惯于使用媒体编码配置信息使得应用软件代码编写…...
2023/3/16 12:06:17 - Quartz.NET
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对…...
2023/3/16 11:38:32 - java算法-递归算法
2019独角兽企业重金招聘Python工程师标准>>> 不废话直接上代码 public class maxtest {public static void main(String[] args) {//###################阶乘递归算法start###################//System.out.println(f(5));//###################阶乘递归算法start##…...
2023/3/16 11:09:32 - Lifecycle-library-stable
Google 最近发布了稳定Lifecyclelibrary。笔者认为:如果你正在使用alpha或者beta版本,以下内容可能对你有用。 Deprecated LifecycleActivity 在stable version 1.0.0 之前,LifeCycle Library 并没有实现 LifecycleOwner这个接口,…...
2023/3/16 10:41:08 - 数据结构——哈希表
前言 使用哈希表可以进行非常快速的查找操作。但是,哈希表究竟是什么玩意儿?很多人避而不谈,虽然知道经常用到,很多语言的内置数据结构像python中的字典,java中的HashMap,都是基于哈希表实现。但哈希表究竟…...
2023/3/16 10:14:40 - Bootstrap~Panel和Table
在我们对一个页面进行设计时,分块是必须的,没有一个网站是一栏而下的,除非你是在看小说,否则你的页面设计一定是分块的,即它由于多个panel组件,在bootstrap里叫到栅格系统,而在每行每列进行宏观…...
2023/3/16 6:40:03 - pyspider操作千万级库,pyspider在对接量级较大库的策略
pyspider操作千万级库,pyspider在对接量级较大库的策略 如果是需要pyspider正常的流程去执行,那必然是会在on_strat()时任务执行超时,可能只读取出几万条或十几万条数据就会被破终止,然后执行index_page(),由于这个超时…...
2023/3/16 6:09:47 - Js+MVC~公用API的设计,返回jsonp后使ajax的error属性生效!
相关知识说明 项目用公用的API事实上就是其它子项目,包括非子项目需要从这个项目中得到一个公用的信息,这种产生信息的接口我们称为公用的API(application program interface)&#…...
2023/3/16 8:48:42 - 【CentOS 7笔记51】,screen虚拟终端#171207
2019独角兽企业重金招聘Python工程师标准>>> hellopasswd screen工具 为了不让一个任务意外终端nohup command &screen是一个虚拟终端yum install -y screenscreen直接回车就进入了虚拟终端ctral a组合键再按d退出虚拟终端,但不是结束screen -ls查看…...
2023/3/16 0:46:40 - 行内元素和块级元素(转)
行内元素和块级元素 2013-01-05 11:40 by greenal, 88623 阅读, 3 评论, 收藏, 编辑 1 块级元素:div , p , form, ul, li , ol, dl, form, address, fieldset, hr, menu, table行内元素:span, strong, em, br, img , input, label…...
2023/3/16 12:33:43 - 微信JSApi支付~坑和如何填坑
微信一直用着不爽,这几天研究它的jsapi支付,即在微信内打开H5页面,完成支付的过程,在这个过程中,你将会遇到各种各样的问题,而大叔将把这些问题的解决方法写一下,希望可以给你带来帮助ÿ…...
2023/3/16 12:05:20 - 阿里云ECS服务器Linux环境下配置php运行环境
阿里云ECS服务器Linux环境安装配置PHP的运行环境,不同于window操作系统下配置,因为是linux操作系统主要是在命令窗体里输入命令来操作,对于初次接触过linux系统的可能会有点怕怕的,下不去手。。。。。。 需要安装的软件有Apacheph…...
2023/3/16 0:45:51 - vim文本编辑器和yum的搭建
rpm -ivh 软件名-版本信息-.rpm (安装软件) rpm -q 软件名 (查看软件是否安装) rpm -e 软件名 (卸载转件) 因为rpm有依赖关系而yum刚好解决此问题 使用vim创建/修改文本文件 vim文本编辑器 命…...
2023/3/16 13:02:32 - sql developer 连接oracle错误一例(ORA-12505)
Oracle安装于VM中用sql developer连接oracle报ORA-12505再三检查lsnrctl status,不得正常后来再发现是oracle instance没有启动。转载于:https://blog.51cto.com/9882derek/2049088...
2023/3/16 13:02:32