vlambda博客
学习文章列表

Ajax应用场景——以获取雪球网港股代码及公司名称为例

本文编辑:赵一帆

技术总编:王子一

Stata&Python云端课程来啦!

引言


在对比了多家财经网站后,笔者发现雪球网的港股代码和相关信息是较为全面的,因此想要了解港股的友友们可以继续往下跟随哦~

1、了解网页并获取数据真实链接
首先,进入到雪球网的港股行情中心,通过对网页的了解发现,当点击下一页时,网址并没有发生变化,这里使用的是Ajax技术,Ajax通俗的理解就是一种可以实现不刷新界面但是能够获取更新数据的技术。这种技术已经得到了非常广泛的应用,如页面上拉加载数据、传统的表单提交、局部刷新数据等。比如今天要讲的例子当中,运用这种技术的情况是更改页面最大显示数量时,但并不刷新网页:

Ajax应用场景——以获取雪球网港股代码及公司名称为例

Ajax应用场景——以获取雪球网港股代码及公司名称为例

那么面对这样的网页特征,我们应该如何获取存储数据的真实链接呢?那么这里就需要了解Ajax技术的核心。这就是XMLHttpRequest对象,XHR可以使得我们不必刷新页面也能取得数据。打开开发者工具F12,点击XHR,就能查看到存储数据的真实链接啦。这里就以每页最大显示,选择每页显示90家公司,共34页。

Ajax应用场景——以获取雪球网港股代码及公司名称为例

Ajax应用场景——以获取雪球网港股代码及公司名称为例
2、调用需要用到的库并获取网页数据
import requestsimport json from pandas.core.frame import DataFramesymbol_list=[]name_list=[] #每页选择显示90家公司,共34页for i in range(1,34):  base_url="https://xueqiu.com/service/v5/stock/screener/quote/list?page={}&size=90&order=desc&orderby=percent&order_by=percent&market=HK&type=hk&is_delay=true&_=1621565322783".format(i) headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' } response=requests.get(base_url,headers=headers).text data=json.loads(response) #只有用json转换之后才可以使用 for item in data['data']['list']: symbol_list.append(item['symbol']) name_list.append(item['name'])
在获取真实链接之后,我们通过Preview大致观察数据,可以发现我们需要的代码和公司名称都在其中,除此之外还有相关的日交易数据:

Ajax应用场景——以获取雪球网港股代码及公司名称为例

这里将获取到的数据转换成数据框再进行输出,由于我们获取数据时将所需数据合并到每一个项目的列表中,要将每一个列表都变成数据框中的每一列,可以通过设置字典的方式,将字典转换为数据框:
data={'代码': symbol_list,'公司名称':name_list} #将列表转换成字典df1=DataFrame(data,index=None) #将字典转换成为数据框df2=df1.sort_values(by='代码') #根据代码进行排序df2.to_csv('雪球网代码.csv',index=False,encoding='utf-8-sig') #输出到csv文件中
由于csv文件的显示问题,在输出港股代码时,会将前面的0自动省去,因此需要对csv文件进行格式设置:

Ajax应用场景——以获取雪球网港股代码及公司名称为例

在设置单元格格式中将数字的格式自定义为五位数字:

Ajax应用场景——以获取雪球网港股代码及公司名称为例

可以看到这里港股代码正常显示了:

Ajax应用场景——以获取雪球网港股代码及公司名称为例

Ajax应用场景——以获取雪球网港股代码及公司名称为例
3、完整代码
import requestsimport json from pandas.core.frame import DataFramesymbol_list=[]name_list=[] #每页选择显示90家公司,共34页for i in range(1,34):  base_url="https://xueqiu.com/service/v5/stock/screener/quote/list?page={}&size=90&order=desc&orderby=percent&order_by=percent&market=HK&type=hk&is_delay=true&_=1621565322783".format(i) headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' } response=requests.get(base_url,headers=headers).text data=json.loads(response) #只有用json转换之后才可以使用 for item in data['data']['list']: symbol_list.append(item['symbol']) name_list.append(item['name'])data={'代码': symbol_list,'公司名称':name_list} #将列表转换成字典df1=DataFrame(data,index=None) #将字典转换成为数据框df2=df1.sort_values(by='代码') #根据代码进行排序df2.to_csv('雪球网代码.csv',index=False,encoding='utf-8-sig') #输出到csv文件中

通过以上代码就可以很轻松的将所有港股代码和公司名称爬取下来,参照着本文的案例,港股的日交易数据也可以用同样的方法进行获取,勤奋的同学们可以抓紧时间学习哦~

Ajax应用场景——以获取雪球网港股代码及公司名称为例
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。

Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例


腾讯课堂课程二维码


Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例


Ajax应用场景——以获取雪球网港股代码及公司名称为例

                


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐

        

         



         






关于我们 




此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。


Ajax应用场景——以获取雪球网港股代码及公司名称为例