1 背景
? 之前使用Selenium爬取 https://eth.btc.com/accounts 上的賬戶地址及其交易記錄,但是運行時間很長,而且老報一些錯誤,所以想到換一種方式來爬取智能合約,
2 方法
- 先對其抓包,獲取請求路徑和引數
- 回圈構造引數
- 使用requests.get(url, params).json()請求獲取資料并使用json方法序列化結果
- 處理獲取到的資料并將其寫入檔案
3 步驟
(1)抓包


通過分析,獲取請求地址和引數,發現只有page和size兩個引數,
(2)構造引數 獲取資料
A.txt中是爬取的一些賬戶地址,通過賬戶地址跟上圖中的請求url組合形成請求地址來獲取其交易記錄
A.txt部分資料示例:
外部地址,1,https://eth.btc.com/accountinfo/0x00000000219ab540356cbb839cbe05303d7705fa,0x00000000219ab540356cbb839cbe05303d7705fa,7513890.00007 ETH,152468
合約地址,2,https://eth.btc.com/accountinfo/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,6942619.43722 ETH,2774885
外部地址,3,https://eth.btc.com/accountinfo/0xbe0eb53f46cd790cd13851d5eff43d12404d33e8,0xbe0eb53f46cd790cd13851d5eff43d12404d33e8,2296896.46551 ETH,963
外部地址,4,https://eth.btc.com/accountinfo/0x73bceb1cd57c711feac4224d062b0f6ff338501e,0x73bceb1cd57c711feac4224d062b0f6ff338501e,1899046.59613 ETH,320
代碼:
import requests
headers = {
'Cookie': 'OCSSID=4df0bjva6j7ejussu8al3eqo03',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
}
def getManyPages(address, total):
params = []
for i in range(1, int(total / 500) + 2):
params.append({"page": i, "size": 500})
url = 'https://explorer-web.api.btc.com/v1/eth/accounts/' + address + '/txns'
print('正在爬取', url, '...')
data = []
for i in params:
print(i)
json = '$$'
try:
json = requests.get(url, params=i, allow_redirects=False, headers=headers).json()
except:
continue
finally:
if json != '$$':
data.append(json.get('data'))
print('爬取結束!', url)
print('================================================================================================')
return data
# 獲取哈希值地址和總共的條數
def getAddressAndTotal():
res = []
with open('../data/A.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
sp = line.split(',')
res.append({
'address': sp[3],
'total': int(str(sp[5]).strip())
})
return res
if __name__ == '__main__':
addrTotal = getAddressAndTotal() # 獲取A.txt中的url和total總數
for at in addrTotal:
dataList = getManyPages(at.get('address'), at.get('total'))
with open('../data/req.txt', 'a', encoding='utf-8') as f:
for r in dataList:
for d in r.get('list'):
f.write(str(d))
f.write('\n')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/299738.html
標籤:區塊鏈
上一篇:區塊鏈游戲- Solcery(Summoner 召喚者)
下一篇:區塊鏈錢包APP逆向分析及實作
