![bbc0352ec433580974fa05f6a784e194.png](https://i-blog.csdnimg.cn/blog_migrate/427985b4bb9e573776ab20f7bea0f9c1.jpeg)
功能简介
- 目标: 获取上交所和深交所所有股票的名称和交易信息。
- 输出: 保存到文件中。
- 技术路线: requests—bs4–re
- 语言:python3.5
![9e876f5e9150db753e8cc9e43e8963b3.png](https://i-blog.csdnimg.cn/blog_migrate/65fbbe4c95834a042bd015c3cd9bc0b7.jpeg)
说明
- 网站选择原则: 股票信息静态存在于html页面中,非js代码生成,没有Robbts协议限制。
- 选取方法: 打开网页,查看源代码,搜索网页的股票价格数据是否存在于源代码中。
如打开新浪股票网,如下图所示:
![5823ffff7af74a954f511ab7a7d02084.png](https://i-blog.csdnimg.cn/blog_migrate/ae1d3bcc3f51b5a84f174f7bdcce09ac.jpeg)
上图中左边为网页的界面,显示了天山股份的股票价格是13.06。右边为该网页的源代码,在源代码中查询13.06发现没有找到。所以判断该网页的数据使用js生成的,不适合本项目。因此换一个网页。
再打开百度股票的网址,如下图所示:
![0f2780db2a8747054fd001b050ed89d6.png](https://i-blog.csdnimg.cn/blog_migrate/06357da58827fb6076e4e518462b494b.jpeg)
从上图中可以发现百度股票的数据是html代码生成的,符合我们本项目的要求,所以在本项目中选择百度股票的网址。
由于百度股票只有单个股票的信息,所以还需要当前股票市场中所有股票的列表,在这里我们选择东方财富网,界面如下图所示:
![ebad099785ecfd06288f44ca821dca3a.png](https://i-blog.csdnimg.cn/blog_migrate/09d9f72b83568e94e88c0c28539898b0.jpeg)
原理分析
查看百度股票每只股票的网址:https://gupiao.baidu.com/stock/sz300023.html,可以发现网址中有一个编号300023正好是这只股票的编号,sz表示的深圳交易所。因此我们构造的程序结构如下:
- 步骤1: 从东方财富网获取股票列表;
- 步骤2: 逐一获取股票代码,并增加到百度股票的链接中,最后对这些链接进行逐个的访问获得股票的信息;
- 步骤3: 将结果存储到文件。
接着查看百度个股信息网页的源代码,发现每只股票的信息在html代码中的存储方式如下:
![cfbad6a336538a4e7a73fde48760689b.png](https://i-blog.csdnimg.cn/blog_migrate/91bf795af9e1d45e7d592d73a83b4418.jpeg)
因此,在我们存储每只股票的信息时,可以参考上图中html代码的存储方式。每一个信息源对应一个信息值,即采用键值对的方式进行存储。在python中键值对的方式可以用字典类型。因此,在本项目中,使用字典来存储每只股票的信息,然后再用字典把所有股票的信息记录起来,最后将字典中的数据输出到文件中。
项目完整程序
import requestsfrom bs4 import BeautifulSoupimport tracebackimport redef 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}