由于之前从事过石化行业,上海石油天然气交易中心成立虽较晚(2015年成立),但一直有关注,去年下半年由于大量供暖采取煤改气,还一个没有霾笼罩的冬天,因此出现了天然气大幅涨价供不应求的状况,闲着没事就用python爬了下上海石油天然气交易中心官网的液化天然气交易数据,并简单做了下数据可视化。
话不多说进入正题:打开 上海石油天然气交易中心 选择 数据指数 点击 LNG 数据,如下:
首先粗略观察下页面结构,如下:
是不是感觉很简单,发现这么规整的数据,左上角还有查询功能,底部有翻页点击。
但是你查询或者点击的时候会发现地址栏是没有变化的,所以可以肯定是post请求了,查询的参数隐藏了,并且你多试几次会发现在‘’全部‘’选项下,如果不指定查询日期,虽然页面底部写着有 2万多条数据,但是你点击最后一页的时候你会发现,后面的数据全是null,空的,难道这是他们故意设置的反爬?搞不懂.....,既然‘全部'选项不指定日期的情况下不知道有多少数据,那我们尝试指定查询日期,试几次发现数据只到2015年7月,2015年7月之前的数据是没有的,这也好理解,毕竟交易中心没成立多久(2015年1月成立,正式挂牌交易日期还得往后延)。
继续分析页面,既然确定了是post请求方式获取网站数据,那么我们使用抓包工具抓包,我使用的是fiddler,设定查询日期从2015-01-01开始一直到现在,点击查询,查看抓包工具信息如下
可以看到 body下面有一个参数表格这就是我们需要的参数信息,先不管代表的含义,继续查看,如下:
其中post是我们请求的网址,中间的不管,最后一行你会发现跟上个图的参数是对应的所以复制下来,将post网址最后加上?后接着加上最后一行,然后继续分析
指定查询日期点击下一页的时候,抓包显示如下:
start参数变成了25,指定的查询日期也在starttime,endtime两个参数那对应,第一个,第二个和最后一个参数先不管,我们可以尝试直接获取网站的返回数据了,如下链接:
https://www.shpgx.com/marketstock/dataList?wareid=3&cd=&starttime=&endtime=&start=0&length=25&ts=1543073580567
得到的是json格式数据,如下:
分析发现页面正好25条数据,对应length参数,start从0开始,每点击下一页增加25,查询时间参数可以指定,cd是表示地区,查询表单里头的华东,华南,华北,西北等等,空是表示查询全部,但是ts表示什么呢,ts完全看不出规律来,那我们尝试将请求网址中的 ts参数删除 ,发现完全没影响,页面数据正常返回,这样前期分析工作基本完成,可以拿出python了
代码上传到了github上了
爬取到的数据如下:
可以采用Pool池多进程爬取,
接下来就是数据清洗规整了,这个很头疼,很费时间,感觉需要说的太多了,哈哈,偷个懒,直接上图,处理成如下:
我是设置的年,月,日,地区四个层级索引,然后新增了一个交易额列,也就是交易量与交易价格的乘积
时间有限,只做了按年-地区和按月-地区的交易量可视化,还可以做很多,比如交易额,根据层级索引搭配能做出多种可视化分析,时间有限,感兴趣的朋友可以自己动手尝试下。
另外再说点,我了解到的是华东地区主要LNG接收地是浙江宁波,辐射江浙沪皖地区,毕竟宁波海岸线都是港口。。华东交易的基本都是中海油的。福建归为华南,辐射本省及江西还有粤东,珠江三角洲及北海接收站归为华南,华南交易的可以看到中石化的影子了,珠三角主要广东自己销了,广西北海接收站辐射湘赣,云贵,偶尔会给广东调配一下,华北的话主要是 天津 辐射 京津冀地区,像西北、华中数据差不多为零,对于西北用气本身处于西气东输干线位置,华中的话大部分是接收的四川盆地来气且本身用气相对华东华北来说较少。可以看出上海石油天然气市场化交易主要集中在华东(中海油),加上近年舟山加大对石化行业的投资,比如新奥舟山接收站,进口国外燃气接海底管道从宁波上岸,华东市场会更加活跃,也占据着龙头地位,以华东为中心,带动华南、华北市场化程度,交易量逐步成上升趋势,也就是说能源交易市场化程度越来越高,交易更加透明。
回聊下去年入冬燃气价格疯涨,大量煤改气供暖,产生突增的需求,另外从图中可以看出2017年10月、11月这两个月份没有交易数据,具体不知道是各地调度供不应求,根本不需要放到市场上交易,还是这两个月无进口量,对比2018年的交易量可知,今年过冬燃气能保证较为充足的供应的、价格也能够保证较为平稳的,不会出现去年一样的价格陡增、燃气供不应求。
看到的朋友,如果喜欢的话,欢迎转载,欢迎评论!