1. 首页 > 基金定投

如何提取股票15分钟价格和交易量(3步教你用网络爬虫爬取股票数据)

人工智能时代,大数据的获取至关重要,利用网络爬虫获取数据是当前最有效的手段。爬虫本质上就是代替人工操作访问网站,自动找到目标数据,并获取目标数据的过程。今天不谈任何协议结构,只通过结合爬取股票数据的代码介绍最基本的爬虫实现,力求让略有python基础的爱好者有一个直观印象。

任务:爬取东方财富网上以6开头(比如浦发银行600000)的股票数据(最高价、换手率、成交量和成交额)。首先在东方财富网(
http://quote.eastmoney.com/stocklist.html)获取全部股票代码列表,然后访问百度股市通(http://gupiao.baidu.com/stock/+股票代码)获取具体数据。

第一步,访问网站,核心函数html=requests.get(url),url是访问链接,返回值html是目标网页源码的全部数据。这里的返回值与通常的网站界面不一样,网站界面的全部显示数据都在源码中有详细记录。点击网页右键查看源代码即可看到。

部分网页源码

第二步,从第一步获取的网页源码数据找到我们需要的目标数据,网页源码按照一定的格式标签排列,通过标签访问目标数据,这个过程称为数据解析和查找。目标函数

解析函数soup = BeautifulSoup ( html , 'html.parser' )

查找函数 find() 或者find_all()或者利用正则表达式对字符串进行匹配查找。

第三步,按照一定格式进行数据存储。可直接存储到txt文件即可。程序运行后部分结果数据如下图

部分结果数据

Python3.5 实现代码如下:

from bs4 import BeautifulSoup
import traceback
import re
import time
import requests
def GetHTMLSource(url): # 得到目标网页源码
 try:
 r=requests.get(url)
 r.raise_for_status ()
 r.encoding = r.apparent_encoding
 return r.text
 except:
 print ( "异常" )
 return ""
def SetFileName():
 dirname = time.strftime ( '%Y%m%d' , time.localtime ( time.time () ) ) #获取当前日期
 dirname += 'sh'
 return dirname
def getStockList(lst , stock_list_url): # 获得东方财富网上以sh6开头的股票代码
 html = GetHTMLSource ( stock_list_url )
 soupdata = BeautifulSoup ( html , 'html.parser' )
 a = soupdata.find_all ( 'a' ) # 用find_all方法遍历所有'a'标签,并取出在'a'标签里面的’href’数据
 for i in a:
 try:
 href = i.attrs[ 'href' ]
 lst.append ( re.findall ( r"sh6\d{5}" , href )[ 0 ] ) # 匹配sh6开头的股票
 except:
 continue
def getStockInfo(lst , stock_info_url , fpath):
 ndate = time.strftime ( '%Y%m%d' , time.localtime ( time.time () ) )
 for stock in lst:
 url = stock_info_url + stock + '.html' # 具体单只股票的url
 html = GetHTMLSource ( url )
 try:
 if html == "":
 continue
 infoDict = {}
 soup = BeautifulSoup ( html , 'html.parser' )
 stockInfo = soup.find ( 'div' , attrs={'class': 'stock-bets'} )
 if stockInfo == None:
 continue
 keyData = stockInfo.find_all ( 'dt' )
 valueData = stockInfo.find_all ( 'dd' )
 inp = stock + "," + ndate + ","
 for i in range ( len ( keyData ) ):
 key = keyData[ i ].text
 val = valueData[ i ].text
 infoDict[ key ] = val
 inp += infoDict[ '最高' ] + "," + infoDict[ '换手率' ] + "," + infoDict[ '成交量' ] + "," + infoDict[ '成交额' ] + "\n"
 with open ( fpath , 'a' , encoding='utf-8' ) as f:
 f.write ( inp )
 except:
 traceback.print_exc ()
 continue
def main():
 stock_name_url = 'http://quote.eastmoney.com/stocklist.html'
 stock_data_url = 'http://gupiao.baidu.com/stock/'
 output_file = './' + SetFileName () + '.txt' # 输出文件的文件名,路径在默认在项目文件夹下
 slist = [ ]
 getStockList ( slist , stock_name_url ) #获取股票名称
 getStockInfo ( slist , stock_data_url , output_file ) #根据股票名称获取数据,保存到output_file文件中
main ()
 
 

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。

联系我们

在线咨询:点击这里给我发消息

微信号:666666