本人没有Mac,请在windows环境下安装。所以MAC里面能安装VM并启动Win操作系统么
所需要安装的软件,部分上传到了我的百度云,建议先下载完毕后再进行后续操作
链接:https://pan.baidu.com/s/1dZCPUBcNMFzPiNvMEK8IBA
提取码:z65t
或按下面流程中提供官网地址,根据情况自行选择相应版本下载。
我们需要下载并安装
1.pycharm,
2.xshell,
3.Vmware WorkStation
4.Linux操作系统CentOS
后三个可选
为什么需要下载这些东西:
python开发工具帮助我们编写python代码,因为python是脚本语言,需要一个python解释器,pycharm都可以帮我们办到(当然还有更多功能),狠人不需要IDE,直接写到记事本里面。
虚拟机可以帮助我们安装Linux操作系统,我们的python软件可以运行在Linux操作系统下,(当然可以运行在windows操作系统下),所以你可以只下载一个pycharm开发客户端,也就是下面操作的第一步Python开发工具安装,就可以进行爬虫开发,而不需要后三者。
当然你可以不依靠虚拟机,原生安装操作系统,也就是俗称的双系统
Xshell,远程连接Linux操作系统的一个软件,地位等同于微软远程桌面/QQ远程桌面/Teamviewer。而SSH其实是一个协议,具体可以自行百度
太多字不看的话,就只要记住,只需要走完下面的Python开发工具安装,就可以进行爬虫的相关开发
1.Python开发工具安装
下载地址:https://www.jetbrains.com/pycharm/
想着要不要录视频,但是我也不喜欢说话,还是图文展示吧,黑色壁纸请无视
双击上图这个pycharm-community-2020.14(社区免费版),如下
我就一个C盘,各位可以选择其它安装目录
如果你知道这几个勾代表什么意思,你可以不勾选,然后自行配置
重启完毕后,双击桌面生成的图标
如下
如下
黄色方框内可以修改随便写一个名字,比如我修改为了下面的名字
也可以不修改,保持默认,然后点击create
学有余力的小伙伴可以自行搜索下图三个选项的区别
等待安装完毕后
出现下图
出现一个错误
看来pycharm不会帮助我们安装python执行环境,没办法,先去安装python
或者去我上面的百度云链接去找python-3.6.6-amd64.exe文件,下载并执行
点击文件
等待
回到我们pycharm软件中
右键MyFirstPyProgram(我好像单词拼错了),如下
选择python file,在下面的界面输入文件名
(上面的MyFisrtPyProgram是项目名(project),项目下面是包,但是我们这里没有体现,包(package)下面是文件名(file),需要包是因为,导入模块的时候,包名就是一个命名空间,可以防止模块名重复)
现在整个界面如下
我们可以在编辑区输入下面的字符
print("你好,世界!")
看到有一个错误,原因应该是我们先安装的pycharm,后安装的python解释器,导致出错(我以为pycharm自带解释器)
按下ctrl+shift+s呼出setting界面,如下
等待片刻
点击ok后,回到主界面,按下组合键ctrl+shirf+f10,得到执行结果
其实这个过程很简单,为什么一截图工程量就巨大
2.SSH软件安装
下载地址:https://www.netsarang.com/en/xshell-download/
打开桌面的xshell
出现两个图标
双击Xshell 6,点击确定
如下
3-1.远程连接我的服务器,进行尝试
点击文件-新建,如下
修改为下面的内容
点击确定按钮,出现下面界面后,双击远程centOS
用户名:super-user
密码:glgjss1
super-user在root组里,所以,权限还是很大的,哈哈哈
最后表示登录成功
如果你执行了后面的一系列操作,在本地创建虚拟机并搭建好了linux操作系统,这里的主机名称和端口号就可以填自己的了,可以先连接我的进行尝试。
这里说一下计网的相关知识,虽然不一定准确。
SSH是一种加密的远程登录网络协议,未加密的远程登录协议就是telnet协议。而远程桌面,teamview,xshell等等软件都是其协议的实现,就好比,看着菜谱炒菜的过程。
首先回顾一下TCP/IP五层模型
telnet是工作在应用层的,调用的是传输层提供的TCP可靠传输服务。
我们回忆一下,我们在xshell新建里面输入了什么
主机名其实是一个域名,有对应的DNS服务器,解析成IP地址(所以你在上面主机这一栏直接填入下面的IP地址下,效果一样,前提是这个域名对应的IP地址不变)
那么,为什么需要这个IP地址加端口号呢。
我们想想,在现实生活中,怎么标识一个人。辽宁省沈阳市皇姑区崇山中路66号6舍520号6号上铺,还是说身份证号532628198308103753。两个信息都能帮助我们确定或者标识到一个人。我们回忆一下平常接触到的名称,IP地址,网络号,端口,主机,MAC地址。
我们去标识一个人,通信就是去找这个人说话的过程,这个人,在计算机的世界里,或者操作系统的世界里,叫进程。所以我们通信的源头,实际上是线程之间的通信。一个计算机上使用的是多道操作系统,不是听说过,多线程的说法么。同一时间,一个计算机上可能运行多个线程。用ipconfig查询到的ip地址,打过比分,是这个办公室的名称,办公室里面有这么多人办公,我怎么标识这一个人呢,这时候端口就出来发挥作用了。我们用IP地址+端口号,也就是103.46.128.49:44755来标识这个远程服务器连接进程。同理,我此刻电脑上还运行着QQ,微信,网易云,他们都会占用不同的端口号,去和互联网通信。
画个图,比如我本地的主机IP地址是192.168.1.2,就类似于下面的过程,端口号就是用来标识进程的
(当然还有其它用处,如多路复用和多路分解,NAT等),ip地址只能标识主机
192.168.1.2:20000 | |
微信 | 192.168.1.2:30001 |
网易云 | 192.168.1.2:40200 |
扩展讲一下,SSH端口号用的22,为什么我这里写的是44755?
因为我是在本地搭建的Linux服务器,用hostname -I命令可以查到我的真实IP地址是192.168.50.120。这是一个私网地址,当你使用ping命令,去ping我的192.168.50.120,大概率是四个包全丢的。那为什么我ping www.baidu.com可以通?
因为DNS服务器给我解析到的IP是163.177.151.109,是一个公网IP,当我的电脑,发出的信息,流到我的路由器后,如果是公网IP,就会移交到下一级路由器,让下一级路由器再找,有没有163.177.151.109这个IP,如果有,就进行通信,如果没有,继续转交到下一个路由器,然后重复这个流程,最后找到百度的服务器。而当我ping一个私网IP,就只会在该子网内寻找有没有这个IP号,而不会移交给路由器,也就是进入不了互联网。路由器在这里起到一个网关的作用。网关就类比成监狱门卫,不能任意进出。
回到最开始的问题,我的192.168.50.120,是一个私网IP,而要在互联网通信,只能使用公网ip才行。所以我委托了这个247j44n772.zicp.vip:44755,域名对应一个公网IP是103.46.128.49,当你们使用xshell工具访问103.46.128.49:44755的时候,自动移交到我的linux服务器IP地址加端口192.168.50.120:22,这个过程叫内网穿透。如下
我们上面讲到了周知端口,就相当于一个约定。比如我们访问百度是在浏览器输入www.baidu.com,如下
由于我们刚才用ping命令,给我们返回了该域名对应的IP地址是163.177.151.109
所以我们可以这样,浏览器输入163.177.151.109:80
因为约定HTTP协议默认80端口,所以你可以直接输入163.177.151.109,他会自动去寻找这个80端口对应的服务
为什么输入网址,就能返回页面呢,是因为使用了http协议的get方法,在返回信息里面就有这个页面的HTML文本信息,最后由浏览器输出。
如果有兴趣的小伙伴,可以搜一下socket TCP/UDP套接字编程。
也可以看我的博客https://blog.csdn.net/qq_34153210/article/details/103475415
虽然我现在看我自己写的,我也看不懂我都写了啥(捂脸)
最后扩展一下,我们经常能接触到的,比如下面这张图
IP地址大家有一定了解了,比如192.168.50.120,那么这个子网掩码和默认网关又是什么东西?
子网掩码我们最多接触的是255.255.255.0
我们把这两串数字都换成二进制
可以使用这个网站:https://tool.lu/hexconvert/
192.168.50.120: 11000000,10101000,00110010,1111000
255.255.255.0: 11111111,11111111, 11111111, 00000000
两个数进行逻辑与操作,也就是1&1=1,0&1=0,1&0=0,0&0=0
上面的结果是 11000000,10101000 ,00110010, 00000000
换成十进制就是192.168.50.0,也就是说,我的主机的网络号是192.168.50.0主机号是120
子网掩码这个东西,就是用来区分网络号和主机号的,在我看来,就是把多余的IP地址段,拿出来给主机号用。
比如我的网络号要是192.168,我的主机号就有256*256=65 536个,相应的子网掩码就是255.255.0.0
当然有些IP地址很特殊,不能作为主机号使用,比如我的网络号是192.168.50.0主机号是120,IP地址合起来是192.168.50.120
如果IP地址为192.168.50.0,也就是主机号全0,表示网络本身
192.168.50.255,主机号全1,表示广播地址
我的路由器地址是192.168.50.1,我可以把路由器设置为默认网关。也就是填上192.168.50.1,在路由器直接输入192.168.50.1
可以访问该路由器,如果是TP或者其他路由器,可以尝试192.168.1.1
一个IP是公网IP还是私网IP,我写了一下,供各位参考(字丑)
所以我们的192.168.50.120是一个C类私网地址,可供使用的主机号有254个,也就是说这个目前我家里的路由器最大只能连接254台设备。
3-2.本地Linux环境搭建
https://blog.csdn.net/qq_34153210/article/details/107134973
3-2-1.虚拟机安装以及配置
上面的链接里都有
3-2-2.在虚拟机中安装Linux
同上
3.2.3.yum安装
这一节可以略过
来源:http://c.biancheng.net/view/2931.html
命令如下:
安装:yum -y install 包名
卸载:yum remove 包名
更新:yum -y update 包名
查看:yum list | grep 包名
搜索:yum search 关键字
后面的内容可以跳过,直接跳到3.2.4节
我们是在windows操作系统,使用xshell软件访问本地虚拟机的SSH服务端,那么我的linux,也要使用SSH访问其它的服务器,
可以考虑安装linux上的SSH客户端
使用我们的SSH查看命令
yum list | grep ssh
然后执行下列命令安装该包
yum -y install openssh.x86_64
问题不大,我们切换到root组
newgrp root
使用id命令可以看到,当前组是root
再次执行yum -y install openssh.x86_64,结果如下
root用户下查看yum文件权限
有执行权限,但是安装软件可能需要在别的目录下写文件,所以考虑使用sudo命令
来源:https://man.linuxde.net/sudo
在root用户下编辑/etc/sudoers文件
结果如下
看到这一行命令
使用:q命令退出编辑
然后输入 visudo /etc/sudoers
改一下权限
然后再次执行visudo /etc/sudoers
看来是文件修改错误了,于是修改sudo.conf的权限
再次执行
原来是用法出了问题
直接输入visudo
结果如下:
再按O键,插入一行
输入Defaults root,如下
esc:wq 保存命令
看来Q是退出命令
root用户下的操作就看看就行
回到super-user用户,继续执行安装
输入密码
看来是我用法错误,继续在root用户下使用visudo命令
添加下面内容后保存
来源:https://man.linuxde.net/sudo
这里有一个错误提示
使用visudo命令后按ESC然后输入:set nu 查看行数
按dd删除
再次执行sudo yum -y update openssh.x86_64
成功
LINUX下 SSH登录命令:https://www.cnblogs.com/ftl1012/p/ssh.html
3.2.3.Linux安装python3.8
这一节可以跳过
一般安装流程可以使用yum安装
而下面python的安装过程,则是下载->配置->构建->安装
对应的命令就是curl->configure->make->make install
Linux是有安装python操作环境的
安装版本:
安装位置:
我们将会在super-user Home目录下安装python3.8执行环境
(1)下载
首先下载Python-3.8.5.tgz(当然也可以使用curl或者wget命令下载)
下载地址:https://www.python.org/downloads/release/python-385/
首先点击蓝框所示图标
将下载好的文件复制到如下路径下
然后执行下列解压命令
tar -zxvf Python-3.8.5.tgz
如下
解压后出现一个文件夹
继续执行下列命令,安装依赖包
sudo yum -y install gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel
我们先创建一个Python3目录,然后把python文件安装到此处
(2)配置
进入Python-3.8.5目录下,执行./configure命令进行配置(因为只有该目录下才有configure文件,在windows一般是双击执行文件,而linux下的文件执行需要使用./文件名,还需要X执行权限)
cd Python-3.8.5
./configure --prefix=/home/super-user/Python3
(3)构建
(4)安装
安装成功后,出现两个警告,如下
现在可以看到我们的Python3.8已经安装到了我们用./configure命令指定的目录下
出现上面两个错误,是因为我们的python命令和pip3命令都没有添加到环境变量,如果我们再任意位置输入python -V
虽然我们已经安装成功了python3.8,但是当前没有python文件,操作系统就会去PATH指定的路径下去查找python文件并执行,
那么我们可以测试一下,我们去含有这个python文件的目录下,执行./python3,会怎么样
找了两个文档,作为参考
我们先按方法一,也就是修改.bashrc文件(文件名前面带点号可以隐藏该文件)
使用vim 编辑该文件,扩展阅读https://man.linuxde.net/vi
更多文件操作的内容,请参阅https://blog.csdn.net/qq_34153210/article/details/107159251
在最后一行添加如下两行代码(按G跳转到最后一行,然后按o插入新行,写入后按ESC:wq退出并保存)
保存退出
执行source .bashrc
执行python3查看版本
我们之前还添加了一行代码alias pip3=/home/super-user/Python3/bin/pip3
pip和yum都是包管理工具,区别就是安装位置和安装对象不同,如果不加这段代码,则会执行python2的pip命令
3.2.4.安装数据库
爬取的数据,是放在内存中的,如何永久保存一个数据,我们可以使用Python 文件I/O放到文件中,但是为了更好的管理分析数据,一般是存放在数据库中,mysql的安装和使用请查看Linux CentOS上安装 MySQL 8.0.16
这里我就给出MongoDB数据库的安装和使用
来源:https://www.runoob.com/mongodb/mongodb-tutorial.html
下载地址:https://www.mongodb.com/try/download/community
或者去顶部百度云链接选择下载
下载安装步骤同3.2.3,所以只会给出关键步骤
tar -xvzf mongodb-linux-x86_64-rhel70-4.2.8.tgz
sudo mv mongodb-linux-x86_64-rhel70-4.2.8/* /usr/local/mongodb
cd /home/super-user
vim .bashrc
在底部添加mongodb安装路径export PATH=/usr/local/mongodb/bin:$PATH,如下
source .bashrc
安装完毕后,启动mongo数据库
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
sudo chown super-user /var/lib/mongo
sudo chown super-user /var/log/mongodb
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
出现下图内容,表示启动成功
除了命令启动,还可以使用配置文件启动
首先需要关闭mongoDB
mongod --shutdown /var/lib/mongo
这个命令不起作用,暂时未找到原因
然后查看是否有进程残留
ps -ef | grep mongo
尝试换种方式关闭服务
mongo
use admin;
db.shutdownServer();
再次查看mongo相关进程
发现都无法停止所有进程,考虑是否有lock文件
rm -f mongod.lock
这个进程对应的内容先不关注了,先尝试配置文件启动
cd /usr/local/mongodb/bin
这个目录下有我们的mongod文件和mongodb.conf文件,如下
mongodb.conf文件就是我们的配置文件,如下:
dbpath=/var/lib/mongo
logpath=/var/log/mongodb/mongodb.log
pidfilepath=/var/log/mongodb/master.pid
directoryperdb=true
logappend=true
bind_ip=0.0.0.0
port=27017
fork=true
其中各配置文件名参加:https://www.cnblogs.com/cwp-bg/p/9479945.html
在windows编辑下的文件要以unix编码,如下
执行启动命令
./mongod -f mongod.conf
出现错误
ERROR: child process failed, exited with error number 100
删除mongod.lock文件,再次启动,仍旧失败
考虑到可能是配置文件编写问题,重写配置文件,
参考资料:https://s0docs0mongodb0com.icopy.site/manual/reference/configuration-options/
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongodb.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/log/mongodb/master.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
各个选项的内容参见上面链接
主要修改的地方是path和dbPath、pidFilePath,bindIp0.0.0.0表示允许任何IP访问数据库
然后删除/var/lib/mongo下的lock文件,以repair方式启动
mongod -f /usr/local/mongodb/bin/mongodb.conf
仍旧报错
about to fork child process, waiting until server is ready for connections.
forked process: 2271
ERROR: child process failed, exited with error number 100
To see additional information in this output, start without the "--fork" option.
重新执行下面命令
rm -f /var/lib/mongo/mongod.lock
mongod --repair
mongod --config /usr/local/mongodb/bin/mongodb.conf
提示错误:
ERROR: child process failed, exited with error number 14
以配置文件启动方式就探索到这里,目前解决不了。
现在回到命令启动的方式
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork --bind_ip_all
看看是不是防火墙的问题
systemctl stop firewalld
居然成功了
相关资料参考https://blog.csdn.net/langzi7758521/article/details/70936024
3.2.5图形界面安装
Linux可以使用图形界面,也就是能像windows或者Ubuntu一样,可视化界面,且可以使用鼠标操作,感兴趣的小伙伴可以尝试