使用Python3爬取沪深300指数列表

1. 思路分析

用chrome打开维基百科沪深300的页面,网址为:https://en.wikipedia.org/wiki/CSI_300_Index 。如下图一所示,可见沪深300指数股票列表。其中,包含了股票代号、公司名,交易所名称,权重和所属行业。这个列表所包含的信息就是我们所需要的。我们在向浏览器发送请求的时候,返回的是html代码,平时用浏览器浏览网页看到的这些图文并茂的规整的页面其实是html代码在经过浏览器渲染后的结果。所以,我们需要找到我们所需要抓取的信息在html代码中的位置,这个就是html解析了。解析的工具很多,作为资深小白,这里笔者选用正则表达式直接分析抓取信息。之所以没有使用成熟的Beautifulsoup4,Xpath等解析包,更多的是作为小白,从正则表达式入手更能体现抓取过程和抓取原理。这里,之后不妨大家试一试使用成熟解析包BS4之类的尝试一下。

图1 沪深300指数列表

如何找到html中需要抓取的信息呢?可以在页面右键,打开网页源代码(Ctrl+U),可以查看到列表中的信息定位如下:

图2 列表信息定位

一个网页的html代码全部打开看上去会非常的繁多,其实html代码是一层一层结构化的,非常规整的。每一对尖括号包起来的是一个标签,比如这里的<tr>…</tr>表示一行,<td>…</td>表示一个空格。

2. 代码实现

(1)首先定义网址url,确定好要爬取的入口链接。

(2)然后获取浏览器信息,设置header信息等模拟浏览器进行访问(这一步可省略,此处没有屏蔽)。

(3)用urllib发送请求,爬取整个网页源代码。

(4)根据要爬取的信息构建正则表达式,如爬取股票代号列表,则采用'<td>(\d{6})'的正则表达式。

(5)采用构建的正则表达式提取相应的信息。

(6)存储爬取到的信息。

完整代码如下:

import pandas as pd
import re
import urllib.request
import tushare as ts
import osindex_list=[]
index_list1=[]
company_list=[]
stock_exchange_list=[]
weighting_list=[]
segment_list=[]url = "https://en.wikipedia.org/wiki/CSI_300_Index"headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]urllib.request.install_opener(opener)
file=urllib.request.urlopen(url)
data=str(file.read())pat='<table class="wikitable sortable">(.*)<h2><span class="mw-headline" id="Sub-Indicies">Sub-Indicies</span><span class="mw-editsection">'#<\/todday><\/table>'
data1= str(re.compile(pat).findall(data))
csi_1='<tbody><tr>(.*)<\/td><\/tr><\/tbody><\/table>'
csi = str(re.findall(csi_1,data1,re.S))hang = '<tr>(.*?)<\/td><\/tr>|<\/td><\/tr><\/tbody><\/table>'
zhenghang = re.findall(hang,csi)for i in range(len(zhenghang)):index_1='<td>(\d{6})'company_1='<td><a href="/.*?" title=".*?">((\w|\s|&|(|)|-){1,100})</a>'stock_exchange_1='<td>(Shanghai|Shenzhen)'weighting_1='<td>(\d,\d{1,2})'segment_1='<td>(Financials|Consumer Staples|Consumer Discretionary|Utilities|Industrials|Health Care|IT|Energy|Materials|Telecommunication Services)'index_list.extend(re.findall(index_1,zhenghang[i]))company_list.extend(re.findall(company_1,zhenghang[i]))stock_exchange_list.extend(re.findall(stock_exchange_1,zhenghang[i]))weighting_list.extend(re.findall(weighting_1,zhenghang[i]))segment_list.extend(re.findall(segment_1,zhenghang[i]))test =pd.DataFrame(columns=name,data=index_list)
#存储
test.to_csv('H:/day/index1.csv')

3.爬取结果

Python爬虫入门:爬虫抓取沪深300指数列表相关推荐

  1. python获取股指_用Python读取csv文件中的沪深300指数历史交易数据

    保存路径:D:\python\用Python读取csv文件中的沪深300指数历史交易数据 程序名称:readcsvhs300.py: 数据名称:沪深300指数历史交易数据.csv: 开发环境:Win7 ...

  2. python分析数据走势图_左大营 | python数据分析篇系列1——探索沪深300指数(附代码)(中)...

    探索沪深300指数(HS300)--基于Python(中) [承接上文] 写在前面:本文只做分析,提供观点,不构成投资建议 如需转载请微信联系:eosO_oke 佛系更新,关注不迷路 沪深300指数是 ...

  3. 用爬虫分析沪深300指数超长走势

    我们知道,一个股市里面有非常多的股票,我们如何能够量化整个股市整体的行情呢,答案是通过一些综合性的指数.本文所选用的沪深300就是这类指数中的一个.我们先来看一下百度百科对于沪深300的解释. 由于股 ...

  4. Python的tushare库实现沪深300 指数数据分析——CAMP模型

    (1)筛选 使用作业1的程序 完成对沪深300指数成分股过去2015年1月-2018年1月三年的数据分析 按alpha从大到小,选择出30只alpha最高的股票形成股票池1,以备进一步分析 (2)预测 ...

  5. Barra 结构化风险模型实现(1)——沪深300指数的风格因子暴露度分析

    米筐科技(RiceQuant)策略研究报告:Barra 结构化风险模型实现(1)--沪深300指数的风格因子暴露度分析 江嘉键 1 年前1 概述 Barra 结构化风险模型是全球知名的投资组合表现和风 ...

  6. 结构化风险模型----转:沪深300指数的风格因子暴露度分析(一)

    from: https://xueqiu.com/7381621247/73649418 1 概述 Barra 结构化风险模型是全球知名的投资组合表现和风险分析工具.最近一段时间,我们米筐科技量化策略 ...

  7. 利用tushare和pandas获得沪深300指数在每个工作日的平均日收益率

    我用下面的代码来获得沪深300指数在不同工作日的平均日收益率. 运用的python包有: pandas tushare numpy datetime #导入需要的包 import pandas as ...

  8. 择时策略 —— 基于北上资金的沪深300指数择时

    1.策略概述 北向资金是指通过港交所流入A 股的资金,资金来源可能是外资.港资,也有可能是国内借道香港的"出口转内销"资金,托管方是在香港营业的银行或者券商.北向资金总体上主要流向 ...

  9. 【系统收藏——中天证券创鑫软件 官方版 [同时支持三板、港股行情、沪深300指数。]】

    中天证券创鑫软件是中天证券自主研发,多位资深咨询师智慧的结晶.同时支持三板.港股行情.沪深300指数.中天证券创鑫软件支持绿色通道.支持开放式基金. 功能介绍 闪电下单;支持多帐户操作;行情交易合一. ...

最新文章

  1. 高中计算机的基本知识教学,高中计算机教案人教版
  2. 事务复制提示初始快照不可用_谈谈数据库的事务ACID
  3. IText实现url转pdf, 解决中文字体问题
  4. Mysql批量更新的三种方式
  5. sqlbulkcopy能用于mysql吗_混凝土自动上料搅拌车能用于农村盖房吗?
  6. Dubbo学习总结(6)——Dubbo开源现状与未来规划
  7. 重庆大学数模美赛预选——城市救护车模型
  8. linux 用livego+obs推流视频并用yolov5检测
  9. 第四次实验任务 任务一
  10. AI笔记: 数学基础之齐次与非齐次线性方程组解的结构定理
  11. win10系统安装jdk8简易教程
  12. LTE(4G) ATTACH流程
  13. 迪文串口屏幕通信问题
  14. 图解SM2算法流程——第1章 概述
  15. linux文件分隔符
  16. 关联规则与强关联规则计算
  17. 3、第三方软件中使用TWS API的相关问题
  18. 红米路由器ac2100怎样设置ipv6_【路由刷机】红米小米 AC2100 Windows下刷Padavan固件小小白教程、升级固件...
  19. PBR常用贴图及使用事项
  20. javaWeb实现qq邮箱验证(二)

热门文章

  1. 关于这第一篇文字性的东西
  2. e.preventDefault
  3. 【Unity学习笔记】为什么欧拉角(Euler)会符合万向节(Gimbal)规则?
  4. python not in range_python报“30 is not in range”的错误应该如何解决?
  5. threejs更新BufferGeometry的uv点位
  6. 隐藏控制台(console)窗口
  7. 百度绿萝算法2.0强势来袭,SEO如何巧妙应对
  8. 阿里云云虚拟主机上个人网站的Https访问配置
  9. 求两数之间的偶数或奇数的和.
  10. Self-describing