返回顶部
首页 > 资讯 > 后端开发 > Python >Python股票数据定向爬虫是怎么样的
  • 297
分享到

Python股票数据定向爬虫是怎么样的

2023-06-17 03:06:37 297人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

python股票数据定向爬虫是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。功能简介目标: 获取上交所和深交所所有股票的名称和交易信息。输出: 保存到文件中。技术路线:

python股票数据定向爬虫是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

功能简介

  • 目标: 获取上交所和深交所所有股票的名称和交易信息。

  • 输出: 保存到文件中。

  • 技术路线: requests—bs4–re

  • 语言:python3.5

说明

  • 网站选择原则: 股票信息静态存在于html页面中,非js代码生成,没有Robbts协议限制。

  • 选取方法: 打开网页,查看源代码,搜索网页的股票价格数据是否存在于源代码中。

如打开新浪股票网址:链接描述(Http://finance.sina.com.cn/realstock/company/sz000877/nc.shtml),如下图所示:

Python股票数据定向爬虫是怎么样的

上图中左边为网页的界面,显示了天山股份的股票价格是13.06。右边为该网页的源代码,在源代码中查询13.06发现没有找到。所以判断该网页的数据使用js生成的,不适合本项目。因此换一个网页。

再打开百度股票的网址:链接描述(https://gupiao.baidu.com/stock/sz300023.html),如下图所示:

Python股票数据定向爬虫是怎么样的

从上图中可以发现百度股票的数据是html代码生成的,符合我们本项目的要求,所以在本项目中选择百度股票的网址。

由于百度股票只有单个股票的信息,所以还需要当前股票市场中所有股票的列表,在这里我们选择东方财富网,网址为:链接描述(http://quote.eastmoney.com/stocklist.html),界面如下图所示:

Python股票数据定向爬虫是怎么样的

原理分析

查看百度股票每只股票的网址:https://gupiao.baidu.com/stock/sz300023.html,可以发现网址中有一个编号300023正好是这只股票的编号,sz表示的深圳交易所。因此我们构造的程序结构如下:

  • 步骤1: 从东方财富网获取股票列表;

  • 步骤2: 逐一获取股票代码,并增加到百度股票的链接中,***对这些链接进行逐个的访问获得股票的信息;

  • 步骤3: 将结果存储到文件。

接着查看百度个股信息网页的源代码,发现每只股票的信息在html代码中的存储方式如下:

Python股票数据定向爬虫是怎么样的

因此,在我们存储每只股票的信息时,可以参考上图中html代码的存储方式。每一个信息源对应一个信息值,即采用键值对的方式进行存储。在Python中键值对的方式可以用字典类型。因此,在本项目中,使用字典来存储每只股票的信息,然后再用字典把所有股票的信息记录起来,***将字典中的数据输出到文件中。

代码编写

首先是获得html网页数据的程序,在这里不多做介绍了,代码如下:

#获得html文本  def getHTMLText(url):      try:          r = requests.get(url)          r.raise_for_status()          r.encoding = r.apparent_encoding          return r.text      except:          return ""

接下来是html代码解析程序,在这里首先需要解析的是东方财富网页面:链接描述(http://quote.eastmoney.com/stocklist.html),我们打开其源代码,如下图所示:

Python股票数据定向爬虫是怎么样的

由上图可以看到,a标签的href属性中的网址链接里面有每只股票的对应的号码,因此我们只要把网址里面对应股票的号码解析出来即可。解析步骤如下:

***步,获得一个页面:

html = getHTMLText(stockURL)

第二步,解析页面,找到所有的a标签:

soup = BeautifulSoup(html, 'html.parser')  a = soup.find_all('a')

第三步,对a标签中的每一个进行遍历来进行相关的处理。处理过程如下:

找到a标签中的href属性,并且判断属性中间的链接,把链接后面的数字取出来,在这里可以使用正则表达式来进行匹配。由于深圳交易所的代码以sz开头,上海交易所的代码以sh开头,股票的数字有6位构成,所以正则表达式可以写为[s][hz]\d{6}。也就是说构造一个正则表达式,在链接中去寻找满足这个正则表达式的字符串,并把它提取出来。代码如下:

for i in a:      href = i.attrs['href']      lst.append(re.findall(r"[s][hz]\d{6}", href)[0])

由于在html中有很多的a标签,但是有些a标签中没有href属性,因此上述程序在运行的时候出现异常,所有对上述的程序还要进行try…except来对程序进行异常处理,代码如下:

for i in a:      try:          href = i.attrs['href']          lst.append(re.findall(r"[s][hz]\d{6}", href)[0])      except:          continue

从上面代码可以看出,对于出现异常的情况我们使用了continue语句,直接让其跳过,继续执行下面的语句。通过上面的程序我们就可以把东方财富网上股票的代码信息全部保存下来了。

将上述的代码封装成一个函数,对东方财富网页面解析的完整代码如下所示:

def getStockList(lst, stockURL):      html = getHTMLText(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

接下来是获得百度股票网链接描述(https://gupiao.baidu.com/stock/sz300023.html)单只股票的信息。我们先查看该页面的源代码,如下图所示:

Python股票数据定向爬虫是怎么样的

股票的信息就存在上图所示的html代码中,因此我们需要对这段html代码进行解析。过程如下:

1.百度股票网的网址为:https://gupiao.baidu.com/stock/

一只股票信息的网址为:https://gupiao.baidu.com/stock/sz300023.html

所以只要百度股票网的网址+每只股票的代码即可,而每只股票的代码我们已经有前面的程序getStockList从东方财富网解析出来了,因此对getStockList函数返回的列表进行遍历即可,代码如下:

for stock in lst:  url = stockURL + stock + ".html"

2.获得网址后,就要访问网页获得网页的html代码了,程序如下:

html = getHTMLText(url)

3.获得了html代码后就需要对html代码进行解析,由上图我们可以看到单个股票的信息存放在标签为div,属性为stock-bets的html代码中,因此对其进行解析:

soup = BeautifulSoup(html, 'html.parser')  stockInfo = soup.find('div',attrs={'class':'stock-bets'})

4.我们又发现股票名称在bets-name标签内,继续解析,存入字典中:

infoDict = {}  name = stockInfo.find_all(attrs={'class':'bets-name'})[0]  infoDict.update({'股票名称': name.text.split()[0]})

split()的意思是股票名称空格后面的部分不需要了。

5.我们从html代码中还可以观察到股票的其他信息存放在dt和dd标签中,其中dt表示股票信息的键域,dd标签是值域。获取全部的键和值:

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

6.***把字典中的数据存入外部文件中:

with open(fpath, 'a', encoding='utf-8') as f:  f.write( str(infoDict) + '\n' )

将上述过程封装成完成的函数,代码如下:

def getStockInfo(lst, stockURL, fpath):      for stock in lst:          url = stockURL + stock + ".html"          html = getHTMLText(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' )          except:              continue

其中try…except用于异常处理。

接下来编写主函数,调用上述函数即可:

def main():      stock_list_url = 'http://quote.eastmoney.com/stocklist.html'      stock_info_url = 'https://gupiao.baidu.com/stock/'      output_file = 'D:/BaiduStockInfo.txt'      slist=[]      getStockList(slist, stock_list_url)      getStockInfo(slist, stock_info_url, output_file)

项目完整程序

# -*- coding: utf-8 -*-     import requests  from bs4 import BeautifulSoup  import traceback  import re  def getHTMLText(url):      try:          r = requests.get(url)          r.raise_for_status()          r.encoding = r.apparent_encoding          return r.text      except:          return ""  def getStockList(lst, stockURL):      html = getHTMLText(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 = getHTMLText(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 = count + 1                  print("\r当前进度: {:.2f}%".fORMat(count*100/len(lst)),end="")          except:              count = count + 1              print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="")              continue  def main():      stock_list_url = 'http://quote.eastmoney.com/stocklist.html'      stock_info_url = 'https://gupiao.baidu.com/stock/'      output_file = 'D:/BaiduStockInfo.txt'      slist=[]      getStockList(slist, stock_list_url)      getStockInfo(slist, stock_info_url, output_file)  main()

上述代码中的print语句用于打印爬取的进度。执行完上述代码后在D盘会出现BaiduStockInfo.txt文件,里面存放了股票的信息。

看完上述内容,你们掌握Python股票数据定向爬虫是怎么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网Python频道,感谢各位的阅读!

--结束END--

本文标题: Python股票数据定向爬虫是怎么样的

本文链接: https://lsjlt.com/news/287015.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python股票数据定向爬虫是怎么样的
    Python股票数据定向爬虫是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。功能简介目标: 获取上交所和深交所所有股票的名称和交易信息。输出: 保存到文件中。技术路线:...
    99+
    2023-06-17
  • 股票数据定向爬虫
    修改了嵩天老师代码部分内容:①将网址中的https 换成 http,不修改的话程序不能爬取;②最好在getStockInfo()函数中,当count >= 50的时候就return, 因为截止到现在一共有4717( 你可以在main(...
    99+
    2023-05-25
    html
  • python爬虫爬取股票的北上资金持仓数据
    目录前言数据分析数据抓取建立模型总结前言 前面已经讲述了如何获取股票的k线数据,今天我们来分析一下股票的资金流入情况,股票的上涨和下跌都是由资金推动的,这其中的北上资金就是一个风向标...
    99+
    2024-04-02
  • 使用python怎么爬取最新的股票数据
    今天就跟大家聊聊有关使用python怎么爬取最新的股票数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 python爬取网易财经不同板块股票数据目标网址:http://quotes...
    99+
    2023-06-06
  • Python怎么爬取股票交易数据并可视化展示
    本篇内容介绍了“Python怎么爬取股票交易数据并可视化展示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开发环境解释器版本: python...
    99+
    2023-06-21
  • Python爬虫过程是怎样的
    本文小编为大家详细介绍“Python爬虫过程是怎样的”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python爬虫过程是怎样的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。网络爬虫从一个或若干初始网页的URL开...
    99+
    2023-06-17
  • 怎么使用python爬虫爬取数据
    本篇内容介绍了“怎么使用python爬虫爬取数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python爬出六部曲第一步:安装reques...
    99+
    2023-06-29
  • python爬虫数据是什么意思
    Python爬虫数据指的是使用Python编程语言编写的一种程序,通过模拟浏览器的行为,自动抓取互联网上的各种数据。这些数据可以是网...
    99+
    2023-09-22
    python
  • Python怎么爬虫网页数据
    在Python中,可以使用多种库和框架来实现网页数据的爬取,其中最常用的是requests和BeautifulSoup库。以下是一个...
    99+
    2023-09-04
    python
  • python爬虫数据怎么获得
    如何通过 python 爬虫获取数据?导入 requests 和 beautifulsoup 库。发送 http 请求获取网页内容。使用 beautifulsoup 解析 html 文档...
    99+
    2024-05-22
    python
  • python爬虫抓取数据的步骤是什么
    Python爬虫抓取数据的步骤通常包括以下几个步骤:1. 导入相关库:导入所需的库,例如requests用于发送HTTP请求,Bea...
    99+
    2023-09-08
    python
  • python爬虫获取数据的方法是什么
    Python爬虫获取数据的方法有以下几种:1. 使用第三方库:Python有很多强大的第三方库,如Requests、Beautifu...
    99+
    2023-10-19
    python
  • Python爬虫Xpath定位数据的两种方法
    方法一:直接右键,将文章路径复制下来点击Copy full Xpath 使用selenium+lxml中的etree进行配合使用,使用etree解析html网页 import req...
    99+
    2024-04-02
  • 怎么使用python爬虫爬取二手房数据
    这篇文章主要介绍怎么使用python爬虫爬取二手房数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和floa...
    99+
    2023-06-14
  • Python爬取租房数据实例是怎么样的
    这篇文章给大家介绍Python爬取租房数据实例是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、什么叫爬虫爬虫,又名“网络爬虫”,就是能够自动访问互联网并将网站内容下载下来的程序。它也是搜索引擎的基础,像百度...
    99+
    2023-06-04
  • Python爬虫入门中8个常用爬虫技巧盘点分别是怎样的
    今天就跟大家聊聊有关Python爬虫入门中8个常用爬虫技巧盘点分别是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。编程对于任何一个新手来说都不是一件容易的事情,Python对于...
    99+
    2023-06-02
  • python网络爬虫方向的第三方库是什么
    这篇文章主要介绍“python网络爬虫方向的第三方库是什么”,在日常操作中,相信很多人在python网络爬虫方向的第三方库是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python网络爬虫方向的第三方库...
    99+
    2023-07-02
  • Python怎么采集股票数据并制作可视化柱状图
    这篇“Python怎么采集股票数据并制作可视化柱状图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么采集股票数...
    99+
    2023-06-29
  • Python网络爬虫之怎么获取网络数据
    使用 Python 获取网络数据使用 Python 语言从互联网上获取数据是一项非常常见的任务。Python 有一个名为 requests 的库,它是一个 Python 的 HTTP 客户端库,用于向 Web 服务器发起 HTTP 请求。我...
    99+
    2023-05-14
    Python
  • 分布式爬虫怎么处理Redis里的数据
    这篇文章主要讲解了“分布式爬虫怎么处理Redis里的数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分布式爬虫怎么处理Redis里的数据”吧!存入Mong...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作