前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


本次选题是先写好代码再写的文章,绝对可以用到页面元素解析,并且还需要对网站的数据加载有一定的分析,才能得到最终的数据,并且小编找的这两个数据源无 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+ 条,结果就不展示了。

Python爬虫实战:爬取股票信息相关推荐

  1. Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)

    Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细) 内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧 正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧 ...

  2. python爬虫实战---爬取大众点评评论

    python爬虫实战-爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

  3. python爬虫实战-爬取视频网站下载视频至本地(selenium)

    #python爬虫实战-爬取视频网站下载视频至本地(selenium) import requests from lxml import etree import json from selenium ...

  4. python爬虫实战-爬取微信公众号所有历史文章 - (00) 概述

    http://efonfighting.imwork.net 欢迎关注微信公众号"一番码客"获取免费下载服务与源码,并及时接收最新文章推送. 最近几年随着人工智能和大数据的兴起,p ...

  5. python爬虫实战--爬取猫眼专业版-实时票房

    小白级别的爬虫入门 最近闲来无事,发现了猫眼专业版-实时票房,可以看到在猫眼上映电影的票房数据,便验证自己之前学的python爬虫,爬取数据,做成.svg文件. 爬虫开始之前 我们先来看看猫眼专业版- ...

  6. python爬虫实战-爬取小说

    今天做一个爬虫练手的小实战:爬取顶点小说网的小说,实现下载到本地(虽然网站上本来就可以下载,不过还是自己写代码来有成就感嘛!) 爬取网站 进入官网后,点击元尊,就爬取这本书了. 我们先把整个网页爬下来 ...

  7. Python爬虫实战- 爬取整个网站112G-8000本pdf epub格式电子书下载

    (整个代码附在最后) 目录: 爬虫准备 - 某电子书网站内容架构分析 爬虫前奏 - 网站Html代码分析,如何获取需要的链接? 爬虫高潮 - 测试是否有反爬虫措施,测试是否能正常下载一个sample ...

  8. python爬虫淘宝实例-Python——爬虫实战 爬取淘宝店铺内所有宝贝图片

    之前用四篇很啰嗦的入门级别的文章,带着大家一起去了解并学习在编写爬虫的过程中,最基本的几个库的用法. 那么今天,我们就正式开始我们的第一篇实战内容,爬取一整个淘宝店铺里的所有宝贝的详情页,并且把详情页 ...

  9. Python爬虫实战——爬取RUNOOB.COM的Python3教程

    说明 关于Python开发环境搭建,可参考博主的另一篇博文-Visual Studio 2017搭配OpenCV之Python环境,省去其中的OpenCV配置及安装即可.另外,在做Python爬虫项目 ...

  10. Python爬虫实战 爬取同城艺龙酒店信息

    1.爬虫说明        同城艺龙的反爬做的是非常好的,本博主在与同城艺龙进行了一整天的殊死搏斗才将其完全的爬下来,本博主是以无锡为例,将无锡的所有酒店的相关信息都爬了下来,共3399条酒店数据,当 ...

最新文章

  1. Linux学习之系统编程篇:与产生信号有关的函数
  2. C++希尔密码Hill Cipher算法(附完整源码)
  3. 2.4亿!知乎到底牛X在哪里!
  4. excel连接mysql 数据库
  5. android 模拟器方向键,键盘操控使用方法
  6. IOS CopyPNGFile 异常问题解决
  7. Fortan写出数据到CSV文件中
  8. windows 下载 gcc
  9. 牛顿迭代法的图像推导思路以及代码
  10. 如何快速去掉word页眉横线
  11. Mac用VirtualBox虚拟机安装win10教程
  12. word一键生成ppt 分页_word怎么分页,这3种方法简单快捷
  13. 台湾成功大学起诉苹果Siri专利侵权 库克哥凌乱了
  14. for、forEach、 for of 、for in的区别
  15. Unity3d打地鼠
  16. 使用腾讯云模板发送短信验证码
  17. RPG Maker的引擎分析(一)
  18. Unity-射线检测
  19. word怎样把多个标题设置成一级标题,二级标题的简便方法
  20. Visual C++不小心卸载,很多软件不能用了怎么办

热门文章

  1. 论人工智能历史、现状与未来发展战略
  2. position:absolute绝对位置的正确使用
  3. 【JMeter 菜鸟实操之五】ant+jenkins 完善html结果报告
  4. Carbon 在 Laravel 中的简单使用
  5. 长城wifi服务器没响应,wifi设置网站进不去怎么办,教你一招轻松解决
  6. 对于电影《八佰》,知乎与豆瓣的评价相差巨大?分析下电影评论
  7. web前端期末大作业——基于HTML+CSS制作河南旅游网页设计
  8. 数据压缩作业二——分析tga文件
  9. 超外差ASK\RF433m、RF315m射频遥控模块解码教程,无线遥控器、电动窗帘遥控、RF遥控器电平信号、协议分析
  10. Android播放流媒体视频