上市公司的企业财务数据一般都会按相关规定及时进行公开发布,我们可以通过网络爬虫技术来实现企业财务数据的获取。我们常用的上市公司的财务数据抓取网站是新浪财经、东方财富等网站,后面我将以新浪财经网站为例来讲解上市公司财务数据抓取及存储分析的详细过程,为后续的量化分析打下数据基础。

Python是使用非常普遍的编写网络爬虫编程序的语言,其他语言如Java、PHP等也可以编写爬虫程序,但相比较而言Python更为简单和实用。一方面,Python提供了许多可以应用于爬虫的库和模块;另一方面,Python语法简单、易读,更适合于初学者学习,因此Python爬虫几乎成了网络爬虫的代名词。网络爬虫主要用途是采集数据,它是数据分析不可或缺的工具之一。许多公司专门设立了 Python 爬虫工程师岗位,该岗位的职责就是为公司的业务拓展提供数据支持。

本次讲解分享的体系内容将从0到1来详细拆解程序开发流程和编码实现,这套体系内容适合给Python零基础的小白学者学习,同时也对熟悉python但对数据采集不熟练的量化专家提供一套Python抓取的最佳实践。该主题的内容体系的主要章节如下:

1. Centos7搭建代码库和Python运行环境

2. Win10搭建Python开发环境

3. Python爬虫应用运行(Docker)镜像准备

4. 编码实现上市公司列表抓取

5. 编码实现上市公司简介和行业板块抓取

6. 编码实现上市公司企业财务摘要抓取

7. 编码实现上市公司历年财务数据抓取

8. 编码实现上市公司财务数据抓取结果入库(Mysql)

9. Python代码提交及部署运行

本文讲解的是第一节,介绍Centos7搭建代码库和Python运行环境,本节希望让开发者能做到自行搭建开发流程中的代码版本管理和运行环境,非常适合零python代码基础的初学者以及对python有兴趣的个人开发者。本节讲解的内容主要包括:

1)搭建Git代码库

2)安装Docker环境

3)安装mysql服务

一、搭建Git代码库

第一步:安装WANDisco仓储包

wget http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

rpm -ivh wandisco-git-release-7-2.noarch.rpm

第二步:yum安装git

yum install -y git

第三步:验证git版本

git --version

第四步:安装httpd

yum install -y httpd

第五步:创建git用户

useradd git

第六步:配置httpd

通过vi /etc/httpd/conf/httpd.conf命令编辑/etc/httpd/conf/httpd.conf文件,修改端口配置,将内容:

Listen 80

#

User apache

Group apache

修改为:

Listen 8081

#

User git

Group git

第七步:创建代码库scrapy-finance.git

git init --bare /home/git/scrapy-finance.git

chown -R git.git /home/git/scrapy-finance.git

第八步:配置代码库http转发配置

增加apache配置文件/etc/httpd/conf.d/git.conf,将/git请求转发到git-cgi,设置配置文件内容为如下:

ServerName centos7-python

<VirtualHost *:8081>

ServerName centos7-python

SetEnv GIT_HTTP_EXPORT_ALL

SetEnv GIT_PROJECT_ROOT /home/git

ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<Location />

AuthType Basic

AuthName "Git"

AuthUserFile /etc/httpd/conf.d/git-team.htpasswd

Require valid-user

</Location>

</VirtualHost>

其中centos7-python为主机名,需要在/etc/hostname中设置,并且在/etc/hosts中配置了IP映射关系,如下图所示:

python抓取年报数据(Python抓取上市公司财务数据)(1)

上图的本机IP为10.39.2.101,可以使用如下命令查看:

ip a show eth0

如下图所示:

python抓取年报数据(Python抓取上市公司财务数据)(2)

注:如果没有查询出IP信息,可能默认网卡不是eth0,可以换成ip a命令查看。

第九步:配置http服务认证账号和密码

#git为用户名,-c是创建文件,-m MD5加密

htpasswd -m -c /etc/httpd/conf.d/git-team.htpasswd git

输入两次密码,密码设置为centos7@git

设置认证文件的权限

#修改git-team.htpasswd文件的权属

chown git.git /etc/httpd/conf.d/git-team.htpasswd

#设置git-team.htpasswd文件的访问权限

chmod 640 /etc/httpd/conf.d/git-team.htpasswd

第十步:启动httpd服务

systemctl start httpd.service

systemctl enable httpd.service

到这里,git库已经完成搭建了,新建的代码库地址为http://centos7-python:8081/git/scrapy-finance.git,后面我们将进行代码库的初始化。

第十一步:初始化git代码库

mkdir /root/opdir

cd /root/opdir

# 存储密码

git config --global credential.helper store

# 克隆git代码库

git clone http://centos7-python:8081/git/scrapy-finance.git

最后输入用户名git和密码centos7@git完成代码库拉取

添加ReadMe.md文件,并提交、推送到git代码库

cd scrapy-finance

# 创建空的项目说明文件

touch ReadMe.md

# 添加文件到git代码库

git add ReadMe.md

# 提交git

git commit -m ”add ReadMe”

# 推送本地仓库的提交到远程代码库的master分支

git push -u origin master

第十二步:清理仓储包

rpm -e wandisco-git-release-7-2.noarch

二、安装Docker环境

第一步:安装docker

curl -sSL https://get.daocloud.io/docker | sh

第二步:配置docker

创建配置文件/etc/docker/daemon.json

mkdir /etc/docker

touch /etc/docker/daemon.json

添加配置内容如下:

{

"data-root": "/data/app/docker/lib",

"registry-mirrors": ["http://18817714.m.daocloud.io"]

}

第三步:启动docker服务

# 启动

systemctl start docker.service

# 开机自启动

systemctl enable docker.service

三、安装mysql服务

第一步:创建mysql数据目录

mkdir -p /root/app/mysql/data

chmod 777 /root/app/mysql/data

第二步:创建mysql配置文件

创建文件/root/app/mysql/my.cnf,并添加以下内容:

[mysqld]

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links = 0

# http://www.percona.com/blog/2008/05/31/dns-achilles-heel-mysql-installation/

skip_name_resolve

!includedir /etc/my.cnf.d

lower_case_table_names = 1

character-set-server=utf8mb4

collation-server=utf8mb4_general_ci

max_connections=1000

default-time_zone=' 8:00'

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

slow_query_log=1

[client]

default-character-set=utf8mb4

第三步:创建mysql启动脚本:

创建启动脚本/root/app/mysql/start_mysql.sh,并添加如下内容:

#!/bin/bash

source /etc/profile &> /dev/null

docker run -e TZ="Asia/Shanghai" --privileged --restart=always \

--hostname="mysql" --name mysql -p 3306:3306 \

-v /root/app/mysql/data:/var/lib/mysql/data \

-v /root/app/mysql/my.cnf:/etc/opt/rh/rh-mysql57/my.cnf \

-e MYSQL_ROOT_PASSWORD=root \

-e MYSQL_USER=dbuser \

-e MYSQL_PASSWORD='db_password' \

-itd centos/mysql-57-centos7

其中,配置mysql端口为3306,mysql的用户名为dbuser密码为db_password

第四步:启动mysql服务

sh /root/app/mysql/start_mysql.sh

第五步:创建存储抓取结果的数据库

docker exec -it mysql /bin/bash

mysql -uroot

create database finance_db;

grant all privileges on finance_db.* TO 'dbuser'@'%';

flush privileges;

其中存储抓取结果的数据库名为finance_db,并授权用户dbuser该库的所有权限。

四、结语

本文主要讲解Python抓取的第一步基础环境的搭建中的开发代码库搭建和运行环境的准备,我们可以使用虚拟机来完成基础环境的测试搭建。如果你不想准备centos服务器/虚拟机来搭建代码库和运行环境,那你可以直接在windows来搭建(步骤类似,但具体命令会有所不同)。有了这个基础环境,我们就能在本地开发代码后提交代码到代码库并打包部署到docker容器中运行了(模拟生产环境级别的运行哦~)。

有任何疑问可以在评论区中交流,下一节将会介绍windows开发环境安装python ide以及开发框架的编写,感兴趣的请关注我的后续动态~

,