python利用re,bs4,requests模块获取股票数据


Posted in Python onJuly 29, 2019

今天闲来无聊无意间看到了百度股票,就想着用python爬一下数据,于是就找到了东方财经网,结合这两个网站,写了一个小爬虫,数据保存在文件中,比较简单的示例,就当做用来练习正则表达式和BeautifulSoupl了。

首先页面分析,打开东方财经网股票列表页,

python利用re,bs4,requests模块获取股票数据

和百度股票详情页 ,右键查看网页源代码,

python利用re,bs4,requests模块获取股票数据

网址后面的代码就是股票代码,所以打算先获取股票代码,然后获取详情,废话少说,直接上代码吧:

import re
import requests
from bs4 import BeautifulSoup

#获取html
def getHtml(url):
	try:
		req=requests.get(url)
		req.raise_for_status()
		req.encoding=req.apparent_encoding
		return req.text
	except :
		print('getHtml失败')

#获取股票代码
def getStockList(lst,stockUrl):
	html=getHtml(stockUrl)
	soup=BeautifulSoup(html,'html.parser')
	a=soup.find_all('a')
	for i in a:
		try:
			href=i.attrs['href']
			lst.append(re.findall(r'[s][hz]\d{6}',href)[0])
		except:
			continue

#获取股票详情
def getStockInfo(lst,stockUrl,fpath):
	count=0
	for stock in lst:
		url=stockUrl+stock+'.html'
		html=getHtml(url)
		try:
			if html=='':
				continue
			infoDict={}
			soup=BeautifulSoup(html,'html.parser')
			stockInfo=soup.find('div',attrs={'class':'stock-bets'})
			name=stockInfo.find_all(attrs={'class':'bets-name'})[0]
			infoDict.update({'股票名称':name.text.split()[0]})
			keyList=stockInfo.find_all('dt')
			valueList=stockInfo.find_all('dd')
			for i in range(len(keyList)):
				key=keyList[i].text
				val=valueList[i].text
				infoDict[key]=val
			with open(fpath,'a',encoding='utf-8') as f:
				f.write(str(infoDict)+'\n')
				count+=1
				print('\r当前速度:{:.2f}%'.format(count*100/len(lst)),end='')
		except:
			count+=1
			print('\r当前速度e:{:.2f}%'.format(count*100/len(lst)),end='')
			continue


def main():
	stockListUrl='http://quote.eastmoney.com/stocklist.html'
	stockInfotUrl='https://gupiao.baidu.com/stock/'
	outPutFile='D:\python\shuju\stockInfo.txt'
	slist=[]
	getStockList(slist,stockListUrl)
	getStockInfo(slist,stockInfotUrl,outPutFile)

main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现生成简单的Makefile文件代码示例
Mar 10 Python
Python合并字符串的3种方法
May 21 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python获取代理IP的实例分享
May 07 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
numpy.linspace函数具体使用详解
May 27 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
python tkinter组件摆放方式详解
Sep 16 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
python xlwt模块的使用解析
Apr 13 Python
Python实战之疫苗研发情况可视化
May 18 Python
实例详解Python装饰器与闭包
Jul 29 #Python
对于Python深浅拷贝的理解
Jul 29 #Python
PyCharm中代码字体大小调整方法
Jul 29 #Python
python pandas cumsum求累计次数的用法
Jul 29 #Python
详解Python用三种方式统计词频的方法
Jul 29 #Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 #Python
Django 重写用户模型的实现
Jul 29 #Python
You might like
香妃
2021/03/03 冲泡冲煮
提升PHP速度全攻略
2006/10/09 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
js身份证验证超强脚本
2008/10/26 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
实用求职信范文分享
2013/12/25 职场文书
违纪学生保证书
2015/02/27 职场文书
未中标通知书
2015/04/17 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
Nginx实现会话保持的两种方式
2022/03/18 Servers