小白学 Python 爬虫(25):爬取股票信息

人生苦短,我用 Python

前文传送门:

小白学 Python 爬虫(1):开篇

小白学 Python 爬虫(2):前置准备(一)基本类库的安装

小白学 Python 爬虫(3):前置准备(二)Linux基础入门

小白学 Python 爬虫(4):前置准备(三)Docker基础入门

小白学 Python 爬虫(5):前置准备(四)数据库基础

小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

小白学 Python 爬虫(7):HTTP 基础

小白学 Python 爬虫(8):网页基础

小白学 Python 爬虫(9):爬虫基础

小白学 Python 爬虫(10):Session 和 Cookies

小白学 Python 爬虫(11):urllib 基础使用(一)

小白学 Python 爬虫(12):urllib 基础使用(二)

小白学 Python 爬虫(13):urllib 基础使用(三)

小白学 Python 爬虫(14):urllib 基础使用(四)

小白学 Python 爬虫(15):urllib 基础使用(五)

小白学 Python 爬虫(16):urllib 实战之爬取妹子图

小白学 Python 爬虫(17):Requests 基础使用

小白学 Python 爬虫(18):Requests 进阶操作

小白学 Python 爬虫(19):Xpath 基操

小白学 Python 爬虫(20):Xpath 进阶

小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

小白学 Python 爬虫(22):解析库 Beautiful Soup(下)

小白学 Python 爬虫(23):解析库 pyquery 入门

小白学 Python 爬虫(24):2019 豆瓣电影排行

引言

上一篇的实战写到最后没有用到页面元素解析,感觉有点小遗憾,不过最后的电影列表还是挺香的,真的推荐一看。

本次选题是先写好代码再写的文章,绝对可以用到页面元素解析,并且还需要对网站的数据加载有一定的分析,才能得到最终的数据,并且小编找的这两个数据源无 ip 访问限制,质量有保证,绝对是小白练手的绝佳之选。

郑重声明: 本文仅用于学习等目的。

分析

首先要爬取股票数据,肯定要先知道有哪些股票吧,这里小编找到了一个网站,这个网站上有股票的编码列表:https://hq.gucheng.com/gpdmylb.html 。

打开 Chrome 的开发者模式,将股票代码一个一个选出来吧。具体过程小编就不贴了,各位同学自行实现。

我们可以将所有的股票代码存放在一个列表中,剩下的就是找一个网站,循环的去将每一只股票的数据取出来咯。

这个网站小编已经找好了,是同花顺,链接: http://stockpage.10jqka.com.cn/000001/ 。

想必各位聪明的同学已经发现了,这个链接中的 000001 就是股票代码。

我们接下来只需要拼接这个链接,就能源源不断的获取到我们想要的数据。

实战

首先,还是先介绍一下本次实战用到的请求库和解析库为: Requests 和 pyquery 。数据存储最后还是落地在 Mysql 。

获取股票代码列表

第一步当然是先构建股票代码列表咯,我们先定义一个方法:

def get_stock_list(stockListURL):r =requests.get(stockListURL, headers = headers)doc = PyQuery(r.text)list = []# 获取所有 section 中 a 节点,并进行迭代for i in doc('.stockTable a').items():try:href = i.attr.hreflist.append(re.findall(r"\d{6}", href)[0])except:continuelist = [item.lower() for item in list]  # 将爬取信息转换小写return list

将上面的链接当做参数传入,大家可以自己运行下看下结果,小编这里就不贴结果了,有点长。。。

获取详情数据

详情的数据看起来好像是在页面上的,但是,实际上并不在,实际最终获取数据的地方并不是页面,而是一个数据接口。

http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code=000001

至于是怎么找出来,小编这次就不说,还是希望各位想学爬虫的同学能自己动动手,去寻找一下,多找几次,自然就摸到门路了。

现在数据接口有了,我们先看下返回的数据吧:

showStockDate({"info":{"000001":{"name":"\u5e73\u5b89\u94f6\u884c"}},"data":{"000001":{"10":"16.13","8":"16.14","9":"15.87","13":"78795234.00","19":"1262802470.00","7":"16.12","15":"40225508.00","14":"37528826.00","69":"17.73","70":"14.51","12":"5","17":"945400.00","264648":"0.010","199112":"0.062","1968584":"0.406","2034120":"9.939","1378761":"16.026","526792":"1.675","395720":"-948073.000","461256":"-39.763","3475914":"313014790000.000","1771976":"1.100","6":"16.12","11":""}}})

很明显,这个结果并不是标准的 json 数据,但这个是 JSONP 返回的标准格式的数据,这里我们先处理下头尾,将它变成一个标准的 json 数据,再对照这页面的数据进行解析,最后将分析好的值写入数据库中。

def getStockInfo(list, stockInfoURL):count = 0for stock in list:try:url = stockInfoURL   stockr = requests.get(url, headers=headers)# 将获取到的数据封装进字典dict1 = json.loads(r.text[14: int(len(r.text)) - 1])print(dict1)# 获取字典中的数据构建写入数据模版insert_data = {"code": stock,"name": dict1['info'][stock]['name'],"jinkai": dict1['data'][stock]['7'],"chengjiaoliang": dict1['data'][stock]['13'],"zhenfu": dict1['data'][stock]['526792'],"zuigao": dict1['data'][stock]['8'],"chengjiaoe": dict1['data'][stock]['19'],"huanshou": dict1['data'][stock]['1968584'],"zuidi": dict1['data'][stock]['9'],"zuoshou": dict1['data'][stock]['6'],"liutongshizhi": dict1['data'][stock]['3475914']}cursor.execute(sql_insert, insert_data)conn.commit()print(stock, ':写入完成')except:print('写入异常')# 遇到错误继续循环continue

这里我们加入异常处理,因为本次爬取的数据有些多,很有可能由于某些原因抛出异常,我们当然不希望有异常的时候中断数据抓取,所以这里添加异常处理继续抓取数据。

完整代码

我们将代码稍作封装,完成本次的实战。

import requests
import re
import json
from pyquery import PyQuery
import pymysql# 数据库连接
def connect():conn = pymysql.connect(host='localhost',port=3306,user='root',password='password',database='test',charset='utf8mb4')# 获取操作游标cursor = conn.cursor()return {"conn": conn, "cursor": cursor}connection = connect()
conn, cursor = connection['conn'], connection['cursor']sql_insert = "insert into stock(code, name, jinkai, chengjiaoliang, zhenfu, zuigao, chengjiaoe, huanshou, zuidi, zuoshou, liutongshizhi, create_date) values (%(code)s, %(name)s, %(jinkai)s, %(chengjiaoliang)s, %(zhenfu)s, %(zuigao)s, %(chengjiaoe)s, %(huanshou)s, %(zuidi)s, %(zuoshou)s, %(liutongshizhi)s, now())"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}def get_stock_list(stockListURL):r =requests.get(stockListURL, headers = headers)doc = PyQuery(r.text)list = []# 获取所有 section 中 a 节点,并进行迭代for i in doc('.stockTable a').items():try:href = i.attr.hreflist.append(re.findall(r"\d{6}", href)[0])except:continuelist = [item.lower() for item in list]  # 将爬取信息转换小写return listdef getStockInfo(list, stockInfoURL):count = 0for stock in list:try:url = stockInfoURL   stockr = requests.get(url, headers=headers)# 将获取到的数据封装进字典dict1 = json.loads(r.text[14: int(len(r.text)) - 1])print(dict1)# 获取字典中的数据构建写入数据模版insert_data = {"code": stock,"name": dict1['info'][stock]['name'],"jinkai": dict1['data'][stock]['7'],"chengjiaoliang": dict1['data'][stock]['13'],"zhenfu": dict1['data'][stock]['526792'],"zuigao": dict1['data'][stock]['8'],"chengjiaoe": dict1['data'][stock]['19'],"huanshou": dict1['data'][stock]['1968584'],"zuidi": dict1['data'][stock]['9'],"zuoshou": dict1['data'][stock]['6'],"liutongshizhi": dict1['data'][stock]['3475914']}cursor.execute(sql_insert, insert_data)conn.commit()print(stock, ':写入完成')except:print('写入异常')# 遇到错误继续循环continue
def main():stock_list_url = 'https://hq.gucheng.com/gpdmylb.html'stock_info_url = 'http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code='list = get_stock_list(stock_list_url)# list = ['601766']getStockInfo(list, stock_info_url)if __name__ == '__main__':main()

成果

最终小编耗时 15 分钟左右,成功抓取数据 4600 条,结果就不展示了。

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github

示例代码-Gitee

您的扫码关注,是对小编坚持原创的最大鼓励:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37216.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3爬虫基本操作——抓取股票信息

目录 1. requests库发送请求,获取响应内容的字符串格式 2.Beautifulsoup解析并获取指定的内容 3.selenium库 没想到我的第一次 — — 写博客就这样毫无预兆地发生了。其实一直对博客非常感兴趣,博客是很好的交流平台,非常 感谢各路博客大神…

用 Python 爬取股票实时数据

今天我们一起来学习一个 Python 爬虫实战案例,我们的目标网站就是东方财富网,废话不多说,开搞 网站分析 东方财富网地址如下 http://quote.eastmoney.com/center/gridlist.html#hs_a_board 我们通过点击该网站的下一页发现,网页内…

爬取股票信息

爬取网站 网易财经 创建的文件 List_url.py from finance.code_list import CodeListdef Shanghai_Stock_Index():"""上证指数"""code int(input("证券代号&#xff1a;"))if code > 201000 and code < 900957:year int(input…

实战干货!用 Python 爬取股票实时数据!

今天我们一起来学习一个 Python 爬虫实战案例&#xff0c;我们的目标网站就是东方财富网&#xff0c;废话不多说&#xff0c;开搞 网站分析 东方财富网地址如下 http://quote.eastmoney.com/center/gridlist.html#hs_a_board 我们通过点击该网站的下一页发现&#xff0c;网页…

基于Python爬虫的股票成交量数据抓取分析系统

目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) 19 1.2.5. 其他平台 21 1.3. 数据获取总结 22 1.3.1. 股票代码抓取的总结 22 1.3.2. 日线数据抓取总结 22 1.3.3. 反爬虫策略及解决的总…

朋友股票亏惨了,我一怒用Python爬取了证券最新数据

大家好&#xff0c;我是辣条。 抓取目标: url:http://webapi.cninfo.com.cn/#/marketDataDate 数据目标: 获取 证券代码 证券简称 交易日期 开盘价 最高价 最低价 收盘价 成交数量 难点: 请求头参数mcode 加密生成 使用第三方库: 1. requests 2. execjs 3. js2py 4. math …

Python爬虫实战:爬取股票信息

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者&#xff1a; PS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入…

python爬虫实战-抓取同花顺股票信息

前言&#xff1a; 在之前介绍requests的基础上&#xff0c;现在开始进行实战。 目标网站&#xff1a;http://q.10jqka.com.cn//index/index/board/all/field/zdf/order/desc/page/ 一 涉及到的技术点&#xff1a; &#xff08;1&#xff09;requests: 用于网页请求 &#xff…

微信小程序登录面板切换不了账号,显示网络连接失败?

打开开发工具就会显示这个提示&#xff0c;无论我是点击确定还是取消&#xff0c;切换账号都显示网络连接失败~&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我看了一些博客&#xff0c;说是选择直连代理。我试了&#xff0c;还是显示 网络连接…

wxpy 扫码登录微信报错 KeyError: pass_ticket(网页版微信登录失败)

使用wxpy开发微信聊天机器人&#xff0c;结果扫码登录后&#xff0c;提示&#xff1a; KeyError: pass_ticket解决方法&#xff1a;wxpy是根据网页版微信的接口封装的库。用wxpy&#xff0c;得去试试网页版微信&#xff08;https://wx.qq.com/&#xff09;看能否正常登录。 如…

pc端集成企业微信的扫码登录及遇到的问题

集成步骤&#xff1a; 1、在企业微信后台中添加应用 2、记录下应用的相关信息&#xff0c;在后文要用到 3、引入企业微信js 旧版&#xff1a;http://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js 新版&#xff08;20210803更新&#xff09;&#xff1a;http…

uniapp微信登录报错-100,login:fail [:-1]未能完成操作。(PGWXAPI错误-1。)

报内容&#xff1a; { “errMsg”: “login:fail [:-1]未能完成操作。&#xff08;PGWXAPI错误-1。&#xff09;,”, “errCode”: -100, “code”: -100 } 原因&#xff1a; 没有在manifest.json文件里面配置appsecret(微信开放平台申请移动应用之后会有个appsecret) 为什么没…

Android微信登录页面实现

利用Android实现微信手机端的登录页面&#xff0c;对于登录的输入做了一些的条件限制诸如&#xff0c;非空&#xff0c;长度限制等&#xff1b; 效果图如下&#xff1a; xml文件代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <Line…

分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快

今天在github又发现一个国内的大神开源的chatGPT项目。先看看整体的效果如何吧。 这个项目是基于OpenAI GPT-3.5 Turbo API 的demo。 本地部署 环境准备 安装node 由于该项目是使用node开发&#xff0c;所以&#xff0c;在部署之前先要安装好node环境。检查您的开发环境和部…

一款反应速度完全碾压chatgpt3.5turbo的软件 curor,直接运行

1、软件简介 Build Software. Fast.是一款可以在编辑器中使用 openAI GPT-4 模型编写的软件 官网地址&#xff1a;https://www.cursor.so/ 2.安装方法 不用安装直接运行exe3.使用方法 CTRLK(生成代码)CTRLL(对话功能)

OpenAI ChatGPT3.5-turbo实际解决问题能力评测

OpenAI ChatGPT3.5-turbo实际解决问题能力评测 ​ 程序员在coding的时候会经常遇到需要查阅资料的情况&#xff0c;最好的结果是直接能拿到一份好用的demo版本code&#xff0c;本次我们来评测&#xff1a;bing搜索和chatGPT3.5&#xff0c;解决实际问题&#xff1a;“html 图片…

程序员“摸鱼”神器,GitHub Copilot“凭本事”完全免费

上周Microsoft 365 Copilot的发布会上几段演示视频让朋友圈沸腾了一整天&#xff0c;颠覆&#xff0c;失业&#xff0c;工业革命刷屏&#xff0c;普遍的焦虑中有工作中重度依赖office的朋友表示如果功能都是真的&#xff0c;那么确实可以节约出很多时间摸鱼&#xff0c;但是立马…

AI人工智能时代真的到来了吗?

近一个月来&#xff0c;关于AI人工智能的话题此起彼伏&#xff0c;先有OpenAI发布GPT-4&#xff0c;后有百度推出文心一言&#xff0c;再有微软把GPT-4接入Office全家桶并命名为“Microsoft 365 Copilot”&#xff0c;除此之外&#xff0c;微软Bing还上线了AI绘图功能、谷歌开放…

文字生万物,AI极简史

AI 算法就像一个人类婴儿 哈罗德科恩花了 42 年把 AARON 铸成“另一半自己”。它是一段被画家造出来的计算机程序&#xff0c;或许也可以叫做 AI 系统。先是花了 20 年学会黑白简笔画&#xff0c;1995 年&#xff0c;它第一次表演上色&#xff0c;以一个庞大的机器模样&#xf…

WindTerm使用(暂停更新)

作为一个经常和代码以及服务器打交道的人&#xff0c;连接远程服务器所使用的工具肯定是越方便越好。目前&#xff0c;我使用的是xshell5和MobaXterm两个。Xshell最新的是7&#xff0c;破解版的我懒得去找&#xff0c;那xshell7免费使用一段时间后&#xff0c;就得付费&#xf…