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

yipeiwu_com7年前Python基础

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

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

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

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

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算法之冒泡排序

详解python算法之冒泡排序

python之冒泡排序 概念: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相...

关于Python中浮点数精度处理的技巧总结

关于Python中浮点数精度处理的技巧总结

前言 最近在使用Python的时候遇到浮点数运算,发现经常会碰到如下情况: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。 比如说: 0.1是十进制,...

今天 平安夜 Python 送你一顶圣诞帽 @微信官方

今天 平安夜 Python 送你一顶圣诞帽 @微信官方

还有多少耿直boy和我一样在等待微信官方送上一顶圣诞帽? 最后知道真相的我眼泪掉下来…… (还蒙在鼓里的同学请在微信最上方的搜索栏自行搜索『圣诞帽』) 好吧,你不给,咱自己来,不就...

numpy 对矩阵中Nan的处理:采用平均值的方法

尽管我们可以将所有的NaN替换成0,但是由于并不知道这些值的意义,所以这样做是个下策。如果它们是开氏温度,那么将它们置成0这种处理策略就太差劲了。 下面我们用平均值来代替缺失值,平均值根...

简述Python中的面向对象编程的概念

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程...