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 相关文章推荐
django开发之settings.py中变量的全局引用详解
Mar 29 Python
sublime text 3配置使用python操作方法
Jun 11 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
python实现画一颗树和一片森林
Jun 25 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
python unichr函数知识点总结
Dec 16 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
Python超简单容易上手的画图工具库推荐
May 10 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
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
php pdo操作数据库示例
2017/03/10 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
python图像处理之镜像实现方法
2015/05/30 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
Java程序员常见面试题
2015/07/16 面试题
八年级音乐教学反思
2014/01/09 职场文书
中学运动会广播稿
2014/01/19 职场文书
金融管理应届生求职信
2014/02/20 职场文书
护士求职自荐信范文
2014/03/19 职场文书
镇创先争优活动总结
2014/08/28 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP
MySQL 语句执行顺序举例解析
2022/06/05 MySQL