Python获取虚拟货币交易信息+筛选
爬取的货币信息来源于非小号网站
一、检查网络源码
我们可以发现一页内容就有100种货币的信息,我们检查网络源码看看能不能找到货币信息
二、打开开发者工具
下滑条到底都没能找到货币信息,这就说明货币信息是动态加载出来的,我们打开开发者工具选中Network重新加载下网页对信息进行抓取,通过搜索来查找货币信息
三、分析URL
找到了我们想要的信息,我们检查下请求地址
通过请求地址发现url中有一个page的参数,那我们将1改为2会不会是第二页货币信息呢?我们可以试一下
果然和我们想的一样,通过这种方法来获取货币信息有一个弊端那就是请求次数太频繁了网站很容易检测到我们是爬虫,接下来我们换一种更快更简洁的方法来获取货币信息
通过api获取货币信息
一、查看官方手册
文档需要翻墙查看
其中各字段的说明如下:
“id”: “币种代码(唯一主键)”,
“name”: “币种英文名称”,
“symbol”: “币种的简称”,
“rank”: 币种的排名,
“logo”: “币种的logo(webp格式)”,
“logo_png”: “币种的logo(非webp格式)”,
“price_usd”: 最新价格(单位:美元),
“price_btc”: 最新价格(单位:BTC),
“volume_24h_usd”: 24h的成交额(单位:美元),
“market_cap_usd”: 流通市值(单位:美元),
“available_supply”: 流通数量,
“total_supply”: 总发行量,
“max_supply”: 最大发行量(最大发行量可能>总发行量,譬如有些币种会主动销毁一部分数量),
“percent_change_1h”: 1小时涨跌幅,
“percent_change_24h”:24小时涨跌幅,
“percent_change_7d”:7天涨跌幅,
“last_updated”: 行情更新时间(10位unix时间戳)
公式
换手率=(24h的成交额/流通市值)x100
流通率=(流通数量/最大发行量)x100
二、编写程序
代码:
import requests
import json
from fake_useragent import UserAgent
import pandas as pd
data=list()
clean=list()
P=100000000
#获取货币信息函数
def url_parsr():
#货币api接口
url ='https://fxhapi.feixiaohao.com/public/v1/ticker'
params={
"start":"0",
'limit':'15000',
'convert':'CNY'
}
headers={"User-Agent":UserAgent().random}
#中文货币信息列表
label=["币种代码","币种英文名称","币种的简称",'币种的排名','币种的logo(webp格式)','币种的logo(非webp格式)',"最新价格(美元)","最新价格(BTC)","24h的成交额","流通市值",'流通数量','总发行量','最大发行量',"1小时涨跌幅",'24小时涨跌幅','7天涨跌幅','行情更新时间',"24H额(¥)",'流通市值(¥)','当前价格(¥)']
try:
response=requests.get(url=url,headers=headers,params=params).text
response=json.loads(response)
for i in response:
dic = {}
for key, value in zip(label, i.values()):
#将英文货币信息转为中文
dic[key] = value
data.append(dic)
except:
print("网络请求失败请重新运行")
#处理货币信息函数
def data_parse():
for i in data:
#有的货币流通市值为0运行会报错
try:
i['换手率']=round((i["24h的成交额"]/i['流通市值']*100),2)
except:
i['换手率']=0
try:
l=(i['流通数量'] / i['最大发行量']) * 100
i['流通率']= round(l,2)
except:
i['流通率'] = 0
if i['换手率']>=0 :
clean.append(i)
#生成Excel函数
def toexcel():
try:
x=pd.DataFrame(clean)
x.drop(columns=['行情更新时间',"最新价格(美元)","币种英文名称",'币种的logo(webp格式)','币种的logo(非webp格式)',"最新价格(BTC)","24h的成交额","流通市值",'流通数量'],axis=1,inplace=True)
x.set_index("币种代码",drop=True, inplace=True)
x.to_excel("./货币.xlsx")
print("货币.xlsx生成成功")
except:
print("数据异常")
def main():
url_parsr()
data_parse()
toexcel()
if __name__ == '__main__':
main()