这次用的是fiddle抓手机的包,简单总结以下python爬手机数据
重点是思路和难点的处理
在电脑上装了个手机模拟器,然后配置好证书之类的就开始抓包(百度配置fiddle)
分析请求
在返回的json数据中,分析请求的json数据,查找里面有没有想要的数据
然后把header复制下来requests请求得到json数据
编码问题
得到的json数据用requests.text发现是ascii编码,里面的中文全被转换了
用以下方法可以解决
name = r"\u6697\u88d4\u5251\u9b54"
print(name.encode('ascii').decode('unicode_escape'))
处理数据
得到json数据后把数据转换为字典来处理
方法1:eval(dic)
方法2:json.load(dic)
用方法2处理时,编码右边为ascii了,所以我用的是方法1
最后就是简单的数据提取了,然后存入文件即可
import requests
import json
def main():
# name = r"\u6697\u88d4\u5251\u9b54"
# print(name.encode('ascii').decode('unicode_escape'))
headers = {
'Referer': 'http://api.maxjia.com/',
'User-Agent': 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 ApiMaxJia/1.0',
'Cookie': 'phone_num=0101010101010101010101',
'Host': 'api.maxjia.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip'
}
url = 'http://api.maxjia.com/api/item/stat/v2/?&game_type=dota2&max_id=0&imei=864895024087254&os_type=Android&os_version=4.2.2&version=4.0.9&lang=zh-cn '
res = requests.get(url, headers=headers)
text = res.text.encode().decode('unicode_escape')
print(text)
# str转换为dic
item = eval(text)
# 筛选索要的数据
ls = item['result']['stat']
dic = {}
# 存入字典
for i in ls:
dic.update({i['name']: i['match_count']})
# 字典排序
sorted(dic.items(), key=lambda x: x[1])
print(dic)
# 存入文件
save_to_file(dic)
def save_to_file(dic):
with open('1.txt', 'w', encoding='utf-8') as f:
print(type(json.dumps(dic, ensure_ascii=False)))
f.write(json.dumps(dic, ensure_ascii=False))
f.close()
main()