Python手记-6:爬虫技术基础(网页结构基础+MySQL 8.0+Redis 5安装)

爬虫分步:抓取页面、分析页面、存储数据。

1.抓取页面

1.1 网页结构基础

1.2 HTML基础知识

1.3 div区块

1.4 Requests 库

2. 解析页面

3. 存储数据(MySQL 8.0+Redis 5.0.4安装)

3.1 Linux下MySQL 8.0安装

3.2 Linux下Redis 5.0.4安装


1.抓取页面

1.1 网页结构基础

网页分为HTML、CSS、JavaScript三部分,有位大佬曾拿网页以人作比拟,HTML是骨架,JavaScript是肌肉,CSS是肌肤,形象至极。以Google Chrome浏览器为例,F12键或者右键“查看网页源代码”即可查看当前的网页源代码。

 通过“选择”按钮和“Elements”选项卡可以获取网页指定区域的源代码文本格式及位置信息,另外结合google analytics对目标网页进行访问数据统计和分析,感兴趣的可以了解下。

1.2 HTML基础知识

推荐阅读https://www.runoob.com/html/html-tutorial.html,本节内容参考该分享。

  • <!DOCTYPE html> 声明为 HTML5 文档,<!DOCTYPE>声明有助于浏览器中正确显示网页;
  • <html> 元素是 HTML 页面的根元素;
  • <head> 元素包含了文档的元(meta)数据,如 <meta charset="utf-8"> 定义网页编码格式为 utf-8;
  • <title> 元素描述了文档的标题;
  • <body> 元素包含了可见的页面内容;
  • <h1>~<h6> 元素定义标题,字号逐级变小;
  • <p> 元素定义段落。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>爬虫基础—HTML</title>
</head>
<body>
    <h1>第1个标题</h1>
    <p>第1个段落</p>
    <h1>第2个标题</h1>
    <p>第2个段落</p>
    <a href="https://book.douban.com/tag/绘本">带链接的内容</a>
</body>
</html>

以上内容存为.html文件,双击该文件:

1.3 div区块

  •  <div> 是HTML最主要的区块,由于它属于块级元素,浏览器会在其前后显示折行,如果与 CSS 一同使用,<div> 元素可用于对大的内容块设置样式属性。
  • <div> 元素的另一个常见的用途是文档布局,取代了使用表格定义布局的老式方法,使用 <table> 元素进行文档布局不是表格的正确用法,<table> 元素的作用是显示表格化的数据。

1.4 Requests 库

Requests唯一的一个非转基因的 Python HTTP 库,人类可以安全享用,属于第三方库,参详https://requests.readthedocs.io/zh_CN/latest/,使用它先正确安装它,方式:

  • [root@chengyu ~]# pip install request

  • [root@chengyu ~]# conda install request

  • 如果是Pycharm中安装:File—>Settings—>你的Project name—>Interpreter—>“+”—>输入request—>install

  • 自主选择request版本可以下载源码安装,如下:

可以通过Github获取到代码:git clone git://github.com/kennethreitz/requests.git
也可以curl下载tarball:$ curl -OL https://github.com/requests/requests/tarball/master
下载后,执行安装:
$ cd requests
$ pip install .

Requests 支持 Python 2.6—2.7以及3.3—3.7,而且能在 PyPy 下完美运行,Requests功能特性:

  • Keep-Alive & 连接池
  • 国际化域名和 URL
  • 带持久 Cookie 的会话
  • 浏览器式的 SSL 认证
  • 自动内容解码
  • 基本/摘要式的身份认证
  • 优雅的 key/value Cookie
  • 自动解压
  • Unicode 响应体
  • HTTP(S) 代理支持
  • 文件分块上传
  • 流下载
  • 连接超时
  • 分块请求
  • 支持 .netrc

关于request库的使用指路:https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html

另外关于自动化测试工具selenium库的安装就不赘述了,下面就ChromeDrive驱动(Chrome浏览器下配合selenium库实现网页抓取)的安装配置做一下简单的说明,这里仅说明Windows环境下的情况。

  • 查看Chrome的版本,帮助—>“关于Google Chrome”,如下版本号81.0:

安装完毕:

2. 解析页面

获取网页源代码的之后,需要提取其中的数据信息,也就是我们想要爬取的对象,这里有几个常用的解析库需要安装,具体什么时候用具体用哪个先不予深究,先看下官方介绍:

安装类似Request库。

3. 存储数据(MySQL 8.0+Redis 5.0.4安装)

说到存储就得说到数据库:关系型或者非关系型,本文中以关系型数据库MySQL 8.0和非关系数据库Redis 5.0.4为例。

3.1 Linux下MySQL 8.0安装

Windows下MySQL的安装傻瓜式就不多说了,这里就啰嗦一下Linux环境下的,这是之前一台测试机上的安装笔记,凑个数。

  • MySQL源码包下载
[root@chengyu ~]# cd /home/software/mysql/
[root@chengyu mysql]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.12.tar.gz
[root@chengyu mysql]# tar zxvf mysql-8.0.12.tar.gz
  • 依赖包安装

相关的依赖包需求可以参详:https://dev.mysql.com/doc/refman/8.0/en/source-installation.html。

[root@chengyu mysql]# yum -y install  cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel
  • Boost下载安装

Mysql5.7版本更新后有很多变化,比如json等,安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost,boost库可以大大地提高软件的开发效率,就像C#里类库,或者JAVA里类库,它是C++的类库。

[root@chengyu mysql]# wget --no-check-certificate https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz
[root@chengyu mysql]#tar -zxvf /home/software/mysql/boost_1_67_0.tar.gz -C /usr/local
[root@chengyu mysql]#cd /usr/local
[root@chengyu local]# mv boost_1_67_0 boost
[root@chengyu local]#cd boost/
[root@chengyu boost]#./bootstrap.sh
[root@chengyu boost]#./b2 install
  • 创建MySQL安装目录与数据文件目录:
[root@chengyu mysql]#  mkdir -p /usr/local/mysql
[root@chengyu mysql]# mkdir -p /home/mysql
[root@chengyu mysql]# mkdir -p /home/mysql/data
[root@chengyu mysql]# mkdir -p /home/mysql/logs
  • 创建MySQL用户
[root@chengyu mysql]# groupadd mysql
[root@chengyu mysql]# useradd -r -g mysql -s /bin/false mysql
[root@chengyu mysql]#  chown -R mysql:mysql /usr/local/mysql
[root@chengyu mysql]# chown -R mysql:mysql /home/mysql
  • 添加MySQL PATH路径并开放3306端口
[root@chengyu ~]#vim /etc/profile
#for mysql
export MYSQL_HOME=/usr/local/mysql
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
[root@chengyu mysql]# source /etc/profile

防火墙的3306端口默认没有开启,若要远程访问,需要开启这个端口

[root@chengyu ~]#vim /etc/sysconfig/iptables

-A INPUT-m state--state NEW-m tcp-p tcp--dport 3306
-j ACCEPT

[root@chengyu ~]#/etc/init.d/iptables restart
或者systemctl restart iptables
  • 使用cmake编译并安装MySQL

[root@chengyu mysql]# cd mysql-8.0.12/

# 编译
[root@chengyu mysql-8.0.12]# cmake \
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_DATADIR=/home/mysql/data \
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
 -DMYSQL_TCP_PORT=3306 \
 -DDEFAULT_CHARSET=utf8mb4 \
 -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
 -DWITH_MYISAM_STORAGE_ENGINE=1 \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
 -DENABLED_LOCAL_INFILE=1 \
 -DENABLE_DOWNLOADS=1 \
 -DWITH_BOOST=/usr/local/boost

# 安装MySQL 8
[root@chengyu mysql-8.0.12]#make&&make install

设置开机启动:

[root@chengyu mysql-8.0.12]#  cd /usr/local/mysql
[root@chengyu mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@chengyu mysql]#  chmod 755 /etc/init.d/mysqld
[root@chengyu mysql]#  chkconfig --add mysqld
[root@chengyu mysql]# chkconfig --level 345 mysqld on
[root@chengyu mysql]# chkconfig --list mysqld
  • 初始化配置

[root@chengyu mysql]#  bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/home/mysql/data --user=mysql
2018-09-13T06:11:05.514846Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2018-09-13T06:11:05.515424Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.12) initializing of server in progress as process 12285
2018-09-13T06:11:08.729118Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rakcnujab6,C
2018-09-13T06:11:10.601783Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.12) initializing of server has completed

从MySQL 5.7.18开始,my-default.cnf不再包含在分发包中或由分发包安装,这里我们从其他版本的MySQL中拷贝一份my-default.cnf,并做相应的修改。

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
 basedir =/usr/local/mysql
 datadir =/home/mysql/data
 port = 3306
# server_id = .....
 socket = /usr/local/mysql/mysql.sock
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 启动MySQL
[root@chengyu mysql]# systemctl start mysqld
[root@chengyu mysql]# systemctl status mysqld
  • 登录数据库并修改初始密码:
[root@chengyu mysql]# mysql -uroot -p

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql> set password='123456';
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

初始化的MySQL 8与MySQL5.6.xx不同之处

(1)初始化工具不同

MySQL5.6.xx使用的是mysql_install_db,MySQL5.7.6+开始官方推荐使用mysqld -initialize。

(2)初始化数据库不同

MySQL5.6.xx初始化之后存在mysql,information_schema,performance_schema,test四个数据库,MySQL5.7.6+初始化之后存在mysql,information_schema,performance_schema,sys四个数据库。

(3)初始化用户不同

MySQL5.6.xx初始化之后存在root@localhost,root@'::1',root@'hostname',''@'localhost',''@'hostname'五个用户,MySQL5.7.6+初始化之后存在mysql.sys,root@localhost用户

(4)初始化root密码

MySQL5.6.xx初始化之后root用户密码为空,MySQL5.7.6+初始化之后会为root@localhost用户生成随机密码。

MySQL的安装到这里结束,另Python与MySQL要交互还需要PyMySQL库的协助,PyMySQL库的安装类似Request库,略过。

3.2 Linux下Redis 5.0.4安装

Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行,而且Redis并不依赖任何非标准库,也没有编译参数必需添加。非关系型数据库Redis在Windows下的图形界面形式的安装比较简单,就不说了,这里仅Linux环境情况简单说明下。

  • 下载解压Redis

Redis可以到它的官网:http://www.redis.cn/进行下载:

[root@chengyu ~]# mkdir -p /home/softwares/nosql
[root@chengyu ~]# cd nosql/
[root@chengyu nosql]# wget http://download.redis.io/releases/redis-5.0.4.tar.gz

Redis可以解压至任何目录,一个make安装即可获得执行、配置文件。

[root@chengyu nosql]# tar xzf redis-5.0.4.tar.gz
[root@chengyu nosql]# cd redis-5.0.4
  • 编译
[root@chengyu redis-5.0.4]# make
或者
[root@chengyu redis-5.0.4]# make test

报错:

报错对安装没事:对于最新稳定版5.0.4,可以先进行make test,test完毕后,顺利会有绿色字体提示:

 

 

 再执行:make&make install。

make命令执行完成之后,会在src目录下生成8个可执行文件,主要几个分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump,它们的作用如下:

(1)redis-server:Redis服务器的daemon启动程序;

(2)redis-cli:Redis命令行操作工具。或者通过telnet进行纯文本协议操作;

(3)redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能;

(4)redis-check-dump:用于本地数据库检查;

(5)redis-check-aof:更新日志检查。

  • 安装

可以使用make install PREFIX=/usr/local/redis 指定安装目录

[root@chengyu redis-5.0.4]# mkdir -p /usr/local/redis

[root@chengyu redis-5.0.4]# make install PREFIX=/usr/local/redis

  • 自启动

make install安装命令是不带自启动脚本的,而redis官方提供了一个手动编译时的自启动脚本,但是需要通过另外一个工具来安装,切换到目录中的utils目录下:

[root@chengyu ~]# /home/softwares/nosql/redis-5.0.4/utils/install_server.sh

在/etc/init.d/目录下可以看到redis_6379这个自启动脚本(也可以自己编写自启动脚本):

[root@chengyu ~]# ll /etc/init.d/

###########################
PATH=/usr/local/redis/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis.conf"
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
##############################

[root@chengyu ~]# systemctl start redis_6379

[root@chengyu ~]# systemctl status redis_6379

  • 查看进程,确认Redis已经启动
[root@chengyu ~]# ps -ef | grep redis  验证并关闭Redis服务
[root@chengyu ~]# redis-cli ping
PONG
[root@chengyu ~]# redis-cli shutdown
[root@chengyu ~]# redis-cli ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
  • 用客户端测试一下是否启动成功
[root@chengyu ~]# redis-cli
127.0.0.1:6379> set ss 10
OK
127.0.0.1:6379> get ss
"10"

另外想要除本地以外的机子访问,需设置:vim /etc/redis.conf

bind 192.183.3.194 127.0.0.1
protected-mode no

设置密码(保证连接保密与安全性):

requirepass redistest
daemonize yes

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值