python从零爬虫获取东方财富网的数据(真实从零开始😶)
北邮大二电子在读(18级)。虽然学校并没有教过python但是直接留了python的作业🧐(虽然不是我的作业,我觉得好玩拿来写了).qwq.所以我就要从零开始学python,然后从零开始爬数据,然后从零开始存到数据库,然后从零开始处理数据。
感兴趣整个思路的可以看下去✨,嫌啰嗦的可以去github直接下代码,我也有注释的🥱
哦对,我是mac
大概要实现的功能是这样的:
获取东方财富所有支持融资融券的融资余额及历史数据,存到数据库里,交给搭档进行可视化分析
第一次看到题目的时候还是很懵,毕竟什么都不会。但是想了一下,我觉得我可以先这样:
- 安装python
- 学一下基础的语句(其实我后来并没有学)
- 了解爬虫的原理和知识并 跟着网上练习简单爬虫
- 分析我的作业需求和构思怎么实现
- 安装数据库,学习简单操作
- 开始写作业
1.准备工作
1.1 安装pycharm
所以我先安装了pycharm,在官网下载就可以。这个是收费的,但是学生用教育邮箱注册就可以获得免费激活(这里是官方的指示链接)。
然后再编译的时候遇到了配置环境的问题(需要安装很多包),搜索发现可以安装一个anaconda的软件包管理系统,里面几乎有全部的包,所以就去安装了。anaconda在官网下载就好了。
记得在任务栏的Pycharm-Preferences-Project Interpreter那里改一下哦。如果环境不对的话,你在import的时候会报错。
1.2学一下简单基础的语句
这里我是去菜鸟上看了眼,感觉和c的思路都差不多吧,不会写或者报错的时候再去查应该是够用的,就没有再看下去了。但是之后再用的时候,发现python的字典之前没有接触过,所以大家可以先看下这部分的知识。(还有python不用打分号诶)
1.3 了解爬虫的原理和知识+小练习
推荐大家去看莫烦的网站(莫烦PYTHON)!我感觉对与基础的爬虫来讲的话,看到3-3就可以了。莫烦大大真的讲的很清楚很有条理(当然对于零基础的我来讲还是经常需要去查语法看下是怎么回事)。莫烦的教程会有小练习,每完成一个心里都会有谱一些。看完教程,我觉得我已经可以分析我的作业了~
莫烦用的是jupyter notebook这个真的很香,是网页的,可以一块一块代码单独运行的,debug的时候或者学习某个语法的时候非常方便。如果你安装了anaconda,你在终端直接输入jupyter notebook
,按下回车就可以运行了。
1.4 分析我的作业
其实老师提供了一个思路,就是东方财富每只股票的链接是有规律的
http://data.eastmoney.com/rzrq/ #融资融券数据全览
http://data.eastmoney.com/rzrq/stock/600815.3.html#*ST厦工
http://data.eastmoney.com/rzrq/stock/600816.3.html#安信信托
那么我只需要改这个“600815”的这个数据就可以访问每一个页面了,然后就可以爬数据了~原来“600815”这六位数是每个股票都会有的。那么就是
- 获得股票的id和name
- 爬取一支股的相关信息
- 用已有的股票id替换参数来实现循环爬取信息
1.5安装数据库+简单操作
但是既然要实现爬虫了,就发现需要存数据了。为了队友方便肯定是要放到数据库里。所以从这里开始,我又需要去学数据库了。
数据库用mysql,我去搜了一些教程,觉得YouTube上的这个特别赞,视频制作精美,老师讲的很容易懂,而且下方有节点链接。大概看了40min后面的就可以需要什么单独再查用法了。这里是视频链接->Programming with Mosh
到这一步,已经是会了使用mysql和mysql workbench了,可以回到python去写作业啦
那么现在就开始操作了😊
2. 建立股票数据表
-
获取股票的id和name
-
把股票的信息放入数据库
通过在东方财富网翻来覆去终于找到了这样的一个网址(东方财富网股票一览表),上面有股票名字和id。右键查看网页源代码,看了一下,网页上的文字不是很多,文字部分基本全是有用信息,所以大概是用
get_text()
就可以了(莫烦爬百度的教程里有用到)
import requests
from bs4 import BeautifulSoup
import re
#get id and name
url = 'http://quote.eastmoney.com/stock_list.html'
html=requests.get(url)
soup=BeautifulSoup(html.content,'lxml')
stocks_in = soup.find_all("li")
for stock_in in stocks_in:
print(stock_in.get_text())
很简单的就得到了结果呢
得到的就是一个还算整齐的一大段字符
其实这个前面是有一些我们不需要的文字的,那怎么用语言来实现删除呢?不,我选择了手动,我command+all,然后复制粘贴到了笔记本,然后手动选择了一下我不需要的内容,delete掉了。这样我们就得到了一个按行存放的股票的信息。
得到结果后要把数据放到数据库里,这样以后访问会方便一些。这个实现就很简单了
- 连接数据库
- 建表
- 按行读取txt
- 把信息放入数据库
在这里需要用到一个叫做PyMySql的库,用pippip3 install pymysql
或者condaconda install -c anaconda pymysql
都可以安装。非常推荐用conda,因为我在用pip给我的其他环境安装的时候,遇到了一大串的问题,花了一个下午才解决。但是用conda就真的是一键安装了。如果安装不上,可能是缺少软连接的问题,把报错复制粘贴去搜。
2.1 连接数据库
这里要用到pymysql库了,记得import pymysql
一下。这个”pymysql“,网上有各种版本(MySQLdb这样的),主要看你安装的时候是什么,环境里有的是什么。
连接数据库用connection的语句,可能是我的库就不太一样,所以网上常见的MySQLdb.connect()
对我就不适用。我在pymysql官方手册找到了一个语法,用这个就可以的
剩下的就没什么难的了,但还是把我的代码放上来
db = pymysql.connections.Connection(
host='127.0.0.1', #这个建议自己去mysql里看一眼,一般默认是127.0.0.1,是本地地址
port=3306, #默认端口也是3306
user='root',
password='*****',
charset='utf8'
)
print(