python爬虫开发教程-01-环境搭建

news/2024/7/19 10:20:13 标签: python, 爬虫

本人没有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

下载地址:https://www.python.org/

或者去我上面的百度云链接去找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地址只能标识主机

QQ192.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,会怎么样

找了两个文档,作为参考

linux下切换python2和python

Linux默认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一样,可视化界面,且可以使用鼠标操作,感兴趣的小伙伴可以尝试

CentOS 7命令行安装GNOME、KDE图形界面

 

                                                                                                                        下一篇 python爬虫开发教程-02-学习python简单语法


http://www.niftyadmin.cn/n/1253524.html

相关文章

python爬虫开发教程-02-学习python简单语法

上一篇 python爬虫开发教程-01-环境搭建 我们来看看其它网站的学习流程 来源:Python3 教程 | 菜鸟教程 Python教程 - 廖雪峰的官方网站 可以跟着流程走一遍,但是还不够高效。 简单看一下上面的目录,入门一种编程语言,究竟学的…

python-多进程多线程

参考资料:https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064 目录 1.多进程 1.1进程组成 1.2进程状态和转换 1.2.1使用Process方法创建进程 1.2.2使用继承方法创建进程 1.3进程通信 1.3.1共享存储 1.3.2消息传递 1.3.3管道通信 1.4进…

python lambda

>>> x 10 >>> a lambda y: x y >>> x 20 >>> b lambda y: x y 现在我问你,a(10)和b(10)返回的结果是什么?如果你认为结果是20和30,那么你就错了: >>> a(10)30 >>> b…

selenium版本不一致导致的报错

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 80 出现这个错误一般是webdriver版本和浏览器版本不一致 我的谷歌浏览器版本 我的webdriver版本 之前装过webdriver,也加…

计算表达式的值

计算表达式的的值是栈的应用,比如我们求中缀表达式(AB*(C-D)-E/F)的值, 1.首先需要将它去掉括号,转化为后缀表达式ABCD-*EF/- 2.依次扫描后缀表达式的值,如果是数字入栈,遇到运算符则弹出两个…

win10系统更新不了,总出现错误0xc8000442

来自 win10系统更新不了,总出现错误0xc8000442,SHIZHI333的回答。 首先卸载制有第三方防护软件管管家类软件,再试试下面的方法:清理一下更新临时文件,具体操作如下: 1.右键点击开始——运行,输入…

奇异值分解的定义及应用

目录 1.定义 2.证明 3.紧凑奇异值分解和截断奇异值分解 4.几何解释 5.性质 6.奇异值分解的计算 7. 奇异值分解与矩阵近似 7.1弗罗尼乌斯范数 7.2矩阵的最优近似 7.3矩阵的外积展开式 8.应用 1.定义 直接把《统计学习方法》的图拿过来 一眼看过来,就是把…

【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(2)!

前言- 明确了项目目录的结构,但是结构什么的也太"抽象"了。 本篇开始上代码! 模型的绘制- 前几天的学习中,live2d的绘制有了一些了解了,在Android端使用OpenGL ES绘制模型时需要Surface绘制和Renderer渲染,那…