以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途谢谢合作!

·作者:@Yhen
·原文网站:CSDN
·原文链接:https://blog.csdn.net/Yhen1/article/details/105882754

转载请说明此出处,侵权必究!谢谢合作!

大噶好!我是python练习时长一个半月的Yhen.
  好久没有发博客啦!第一是因为最近学校方面的学习和部门工作比较多,时间少了。第二个是感觉爬虫方面的博客写的也比较多了,而且爬虫这东西,你做多了,就会感觉方法套路都是差不多的,无非就是获取数据+解析数据+储存数据。再写一般的爬虫文章可能会没有这么容易吸引大家的阅读的兴趣了。所以我就在想先去学习新的知识,再来把我觉得比较有趣有用的知识分享给大家。

虽然以后的内容应该还是会以爬虫为主,但是我尽可能在项目的选择上选择一些大家比较感兴趣的或者改进爬虫代码,用更高效率的方式来爬。以后有时间的话,会分享下用多协程来完成爬虫任务以及用scrapy爬虫框架来进行爬取。

我现在准备学习数据分析,以后在学习的过程中也会分享一些有趣的经验给大家。

今天给大家分享的项目还是以爬虫为基础的,但和我之前的项目有所不同的是,之前的数据都是储存在txt文件里的。今天我们要把这些数据保存到数据库中去。最后会把源码也分享给大家!

PS:关于数据库,我也是初学者。今天的教程是我看了腾讯课堂老师的视频后,自己实践成功后写出来分享给大家的。也算是作为自己的一个笔记吧。因为我也和大家一样,都是刚刚接触的,所以有些地方可能能理解的不是很透彻。所以也请大佬们多多包涵,若发现我有错误的地方,请在评论区指正!谢谢大家!

好啦,话不多说了,马上开始今天的分享

文章目录

  • 一.前期准备
  • 二.思路分析
  • 三.代码实现
  • 四.完整源代码获取
  • 五.往期文章回顾

一.前期准备

1.今天我们用到的是最常用的数据库MySQL,因为它是开源,最重要的是免费的!!!

下载安装教程
mysql下载安装教程

2.如果刚刚大家安装的时候,安装了MySql Workbeach了请忽略这一步
如果没有,请安装MySql Workbeach,这个是mysql数据化的可视化软件,(其实没有安装也是没有影响的,只是在这里面可以更方便的查看数据。待会我也会演示直接用mysql查看数据库数据表的数据)

mysql workbench如何下载安装,详细教程

我在安装mysqlworkbeach的时候就提示缺少visual c++2019,我在网上找到了资源,但是现在找不回网址了。于是我把它保存到网盘。如果和我出现同样情况的同学可以下载

链接:https://pan.baidu.com/s/1R4mm3IGK8jmmAdyJ2YMukw
提取码:78f4
复制这段内容后打开百度网盘手机App,操作更方便哦

安装好软件后,接下来就是今天要用到的一些第三方库了

3.第三方库(需要自行安装.如在终端输入:pip install+库名)

requests     这个不用解释了吧  经典爬虫库呢

pandas  一个数据分析基础库 今天就是要用它来实现储存数据到数据库中去

Bs4  今天用里面的Beautifulsoup来进行数据的定位解析

sqlalchemy  这个就是和数据库有关的第三方库了。用它来导入引擎,可以理解为是ORM的一个框架。它可以把数据中当中关于表格的操作转化为面向对象的操作。

OK,第三方库都安装好了以后
就正式开始今天的分享啦

二.思路分析

今天我们要爬取的项目是中商产业研究所里面提供的A股上市公司名单

url:
https://s.askci.com/stock/a/0-0?reportTime=2019-12-31&pageNum=2#QueryCondition

我们下拉页面,找到这个表格的数据
我们今天的目标是把这一整个表格爬取下来,并保存到数据库


其实pandas里面有个方法是可以把页面中的所有tables标签的数据爬取下来并保存到DateFrame对象中
那么我为什么还要用Beautifulsoup呢?因为在这个表格上面还有两个表格,而我们只想要截图里面的这个表格里面的数据,所以我们要通过Beautifulsoup来进行定位获取到这个表格的数据

ok,所以我们的思路是
1.通过requests获取数据
2.用Beautifulsoup解析到我们想要表格的数据
3.用Pandas把tables标签下所有数据保存到数据库

下面带大家代码来实现

三.代码实现

首先是导包
因为刚刚准备的时候已经和大家说明每个库的大概用法
所以我这里就直接全部导入了

 #必备爬虫库
import requests# 导入panda库 取别名pd
import pandas as pd# 导入BeautifulSoup数据解析库
from bs4 import BeautifulSoup# 从sqlalchemy导入引擎create_engine
from sqlalchemy import create_engine

我们首先带着请求头浏览器类型对这个网页发送请求


因为一些疏忽,我这里演示的是第一页的页面
但是我实际代码实现的是第二页的抓取
但是无关紧要,是完全不影响这个教程的

#要爬取的网址
url ='https://s.askci.com/stock/a/0-0?reportTime=2019-12-31&pageNum=2#QueryCondition'
# 请求头:浏览器类型
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}# 发送请求 获取其源码
res =requests.get(url,headers=headers).text

我们打印下看能否正常得到数据呢

可以看到是没有问题的,我们的股票数据也获取了,也没有出现乱码问题

那么接下来就是提取定位数据啦
首先打开我们的检查工具后
按照下图的步骤操作


定位到表格的数据后
可以看到控制台定位到了一个a标签
我们再往上找它的上一个table标签
于是找到了这么一个table标签

没错!他就是我们要找的table

那么怎么定位数据呢?大家一般用Beautifulsoup都是用它的find或者find_all 标签的用法吧?
但是今天我们不用它,而是用select方法来定位数据
那么select怎么找呢?
非常简单

首先,在table标签处点击一下

然后右键单击
找到 ‘copy’—>‘copy select’ 即可


这样就直接复制了select了哦

接下来就用代码把数据提取出来

# 将数据解析为BS对象 , 解析方法选择“lxml”
html =BeautifulSoup(res,"lxml")
# 用select的方式提取数据 返回的是列表类型的数据 通过索引取出数据
# #myTable04可直接在浏览器copy
a =html.select('#myTable04')[0]

打印下结果

没毛病呀!成功把table下的全部内容提取到了

那么,接下来就是全新的内容:储存数据到数据库 了

怎么操作呢?
先看代码

# 通过read_html方法解析数据,通过索引取出DataFrame数据 ,header=0不添加表头
rusult=pd.read_html(a.prettify(),header=0)[0]

这一行代码是通过pandas的 read_html方法来解析数据
他可以自动获取到数据中table标签下的所有数据

里面的参数 a.prettify()的意思是对数据进行美化 header=0是不添加表头的意思

因为这个数据本身还是一个Bs的对象数据
所以我们要通过索引来取出DateFrame数据
PS:DateFrame是一种表格型数据结构

接下来就是python与数据库的连接配置操作了
注意:你要连接的前提是你电脑必须要已经安装了MySQL数据库了

# 通过create_engine引擎连接数据库
# create_engine('要连接的数据库+连接使用的API://数据库账户名:数据库密码@主机号:端口/存入的库名?字符编码')
conn =create_engine('mysql+pymysql://root:root@localhost:3306/hyh?charset=utf8')
# stock0332 保存的表名
# con=conn 用刚刚设置好的引擎连接
# if_exists ='append' 如果表存在就追加
rusult.to_sql('stock0332',con=conn,if_exists ='append')

首先要创建一个引擎(python和MySQL连接的通道)
这里看似要传很多数据,其实都是套路操作
这是我总结的
conn =create_engine(‘要连接的数据库+连接使用的API://数据库账户名:数据库密码@主机号:端口/存入的库名?字符编码’)

如果是本地的数据库,主机号localhost。
端口如果当时安装没有修改的话默认是3306(这里建议大家默认即可)
账户名默认为root
数据库名:这个hyh是我自己建的库

Mysql在安装后默认有以下库
information_schema,mysql,performance_schema,test
大家可以选择一个作为你要存放的库
rusult.to_sql(‘stock0331’,con=conn,if_exists =‘append’)

最后一行就是通过上面的引擎,把我们的DataFrame数据存入数据库中去,‘stock0332’是我要新建保存数据的表名,如果这张表不存在就创建,如果存在就追加

但是如果我们就这样执行代码的话

发现是会报一个(pymysql.err.InternalError) (1366:的错误的
(因为我已经修改配置,所以无法截图演示)

这个问题可是困扰了我一个上午啊,把这个错误信息发到百度,也没有找到解决方法。

于是我修改查询关键词为‘pandas写入mysql报错’
终于在一篇知乎文章里面找到了解决了方法!

原文链接
Pandas写入mysql报错:(pymysql.err.InternalError) (1366:

文中说这是字符编码问题,因为数据库的默认编码是utf8,只支持3字节的数据。而我们存入的数据有些的4个字节的字符。所以要把数据库的编码修改为utf8mb4

然后里面详细的介绍了解决的方法
1.更改已经建好的数据库和数据表类型

更改数据库编码:

ALTER DATABASE DATABASE_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATEutf8mb4_general_ci;

Ps:这些都是SQL语句,需要在mysql或者mysqlworkbeach里面执行,不要在复制到python里面执行了哦

这些不难,直接复制就行。下面语句中我加粗的DATABASE_NAME和TABLE_NAME对应的是你要修改的库名和表名(请根据自己的情况把它们替换掉)

修改完成后,就可以导入啦
先给大家看看导入前我的hyh库中里面都有什么表

然后代码执行完成后
再来看看会发生什么

可以看到,变成了4个表
成功生成了stock0332表

修改之后还不行
还会出现一个报错

这是因为员工人数中出现了这个“–”

而数据表中员工人数这一字段设置的数字类型的
自然就会起冲突

那么怎么解决呢?

首先打开mysqlworkbeach
找到我们要修改的数据表

右击,找到Alter Table 点击

点击员工人数
找到右下角的Data Type 修改数据类型

修改为TEXT 然后点击Apply

继续点击Apply


Finish

我们再来执行代码
看看是否表中都插入股票信息呢?
执行代码 select * from stock0332;

看,是不是成功的把股票信息都录入啦!
现在看起来有点乱,是因为数据太多了

我们再到mysqlworkbeach里面看看

是不是就很美观了呢
再来回到网页验证下

数据库里面的内容和网页的一样

所以是成功把网页的第二页数据给保存到数据库里面了!

完结啦!
把源码给大家

四.完整源代码获取

扫码关注我的微信公众号Yhen杂文铺后台回复股票Spider即可获取哦.

最后祝大家假期愉快!

五.往期文章回顾

Yhen带你趣味入门Python①—Windows下Python下载及安装

【python热搜爬虫+定时发送邮件操作①】不会吧不会吧!不会2020了还有人需要用软件看微博热搜吧?

【python微博爬虫+定时发送邮件操作②】不会吧不会吧!不会2020了还有人需要用软件看微博热搜吧?

【爬虫+数据可视化】Yhen手把手带你爬取CSDN博客访问量数据并绘制成柱状图

【爬虫】Yhen手把手带你爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具

【爬虫】Yhen手把手带你用python爬小说网站,全网打尽,想看就看!(这可能会是你看过最详细的教程)

【实用小技巧】用python自动判断并删除目录下的空文件夹(超优雅)

【selenium爬虫】
Yhen手把手带你用selenium自动化爬虫爬取海贼王动漫图片

【爬虫】秀才不出门,天下事尽知。你也能做到!Yhen手把手带你打造每日新闻资讯速达小工具。

【爬虫】Yhen手把手带你用python爬取知乎大佬热门文章

【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔

【前端】学过一天的HTML+CSS后,能做出什么有趣的项目?

【爬虫】秀才不出门,天下事尽知。你也能做到!Yhen手把手带你打造每日新闻资讯速达小工具。

【爬虫+数据库操作】用pandas将爬取的股票信息存入数据库!相关推荐

  1. Python网络爬虫使用BeautifulSoup爬取网页内容并存入数据库案例

    使用BeautifulSoup爬取网页内容并存入数据库案例 学习了Python网络爬虫,完成里一个比较完整的爬虫案例与大家分享 爬取地址:http://www.tipdm.com/cpzx/index ...

  2. python爬取微博数据存入数据库_Python爬取微博数据并存入mysql,excel中

    寒假期间做微博数据统计,由于是部门要求,也没办法,自己又是一个懒人,直接用python实现吧.写的很粗糙,也很差,请大家别介意. 总的来说分成两个模块:一个爬取微博数据存入数据库,一个从数据库调取数据 ...

  3. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  4. 爬虫项目代理操作和线程池爬取

    代理操作 代理操作的目的 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问.所以我们需要设置一些代 ...

  5. Python爬虫之运用scrapy框架将爬取的内容存入文件和数据库

    文章目录 前言 源码 爬虫文件(test1) pipelines.py setting.py 运行结果 前言 主要运用了scrapy持久化存储操作,下面主要展示spider和管道文件及一些设置. 源码 ...

  6. 实战爬虫-爬取红袖添香并存入数据库

    看了很多爬虫视频的视频,最近找了个小说网站练练手 ####目标:红袖添香前20页小说,包括小说名字,作者,类别,状态,字数,以及基本介绍 ####网址在这儿: https://www.hongxiu. ...

  7. python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

  8. python抓取数据库_Python-7.爬取大量数据存入数据库

    本章包含内容: 前言 mongodb环境配置 爬取数据的代码分析 一.前言 在更新完上一篇python文章时,就一直想爬取一个10万量级的数据.在解了mongodb的基本用法和环境配置后,第一次测试的 ...

  9. python爬取微博数据存入数据库_python爬取微博并且存入数据库

    由于平时喜欢刷微博,追星,所以写了想要写一个爬取微博的爬虫,在老师的建议下选择从移动端爬取,因为移动端页面元素简洁,易于爬取.在看微博时发现有比移动端更加简单的一个版本....老年机版?就是分页式的. ...

最新文章

  1. 一步一步 Mac OS X 与 Windows 7 双系统共存 的“黑苹果” 电脑 安装 入门
  2. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
  3. Android 进行单元測试难在哪-part3
  4. BOOST 线程完全攻略 - 扩展 - 可被关闭的线程类
  5. 使用ffmpeg根据开始和结束时间剪切视频
  6. 没有文化可以学php吗,宋威龙深夜发文感慨,却被吐槽文化低,学历真的重要吗?...
  7. 系统分析师——论文篇(三)
  8. 腾讯微博开放平台开发吐槽
  9. 林子雨大数据java练习
  10. 鼎新TIPTOP GP/鼎捷易拓ERP系统介绍
  11. 福昕pdf Acrobat DC pdf 右键菜单注册表
  12. 微信降级adb备份android7.0,微信自动帮你更新7.0了?简单两步轻松降级
  13. python自然语言分析_Python自然语言处理-分析句子结构
  14. Python数据分析与可视化案例解析
  15. CSDN页面上方广告条太烦人?js写个油猴脚本给它隐藏了~
  16. 使用nsis制作的安装包安装后,无法卸载干净的问题
  17. iOS10全新方法实现推送+deviceToken无法获取或无效的解决
  18. 线性代数笔记(1):向量空间与子空间
  19. how to build sailfish-office(cmake mb2/sb2)
  20. Express WEB 应用开发框架-姜威-专题视频课程

热门文章

  1. iPhone 重量 android,羡慕133克的iPhone12?这三部安卓旗舰机一部比一部轻
  2. 张雷博士谈IBM沃森背后的AI技术
  3. java杨辉三角_Java实现杨辉三角
  4. 文本编码时间操作命令
  5. 小白入门STM32(2)---控制SG90舵机---基础工作原理详解
  6. 简单的makefile文件编写
  7. windows开发的qt项目移植到linux平台
  8. Excel表批量输入“缺勤”
  9. 一个自己设置 Pycharm主题设置
  10. 千锋逆战1903班Days17上课代码以及笔记