本帖最后由 wushaominkk 于 2018-5-15 22:58 编辑
背景说明:最近在玩国际服的星际战甲(warframe),因为里面的警报任务是动态刷新的,虽然有一些网站可以看,但是每次打开网页总觉得太麻烦了,于是就自己动手写了一个爬虫,差不多是边学边写,不好的地方请指出来,共同进步,谢谢。
必须用到的工具:- 一个可以抓包的浏览器,
- python 3.6环境,
- python编译器。
- 脑子(这不废话么,在看的哪个不是大佬)
开始:
数据来源:直接在游戏里面提取肯定是不现实的,上面也说了有很多提供这些信息的网站,经过筛选,确定网站(主要是因为是中文我看得懂才选的)http://wf.poedb.tw/,下图是我要的数据。
我要的信息
数据抓包:因为之前我也说了这个任务是动态的,所以我这里直接可以排除在源代码中去找我要的数据包,直接进行抓包,我用的360浏览器,直接按F12---network--clear(清除原来的包,一般也没有)--F5(刷新),我们得到下面的图。
抓包
数据分析:里面有很多的.css和.js以及.png的后缀的直接不用看,然后一个一个的去点开查看,然后就可以找到我们的目标,如下图,我们注意方框中的两个数据是一样的,红色的箭头也注意一下,data.php?t=all就是我们的要的数据。
分析数据包
提取数据:我们要的数据找到了,下面就是怎么把这些数据拿下来,我们点开data.php?t=all数据包的haders,里面可以看到链接地址。
数据地址
代码编写:准备工作是多了点(不过是有必要的),不过我们现在开始吧(不准吐槽我的命名)。
需要的模块
[Python] 纯文本查看 复制代码 import json
import time
import urllib.request
把数据拿到本地:
[Python] 纯文本查看 复制代码 def getlist():
# 获取地址
weburl = 'http://wf.poedb.tw/data.php?t=all'
# 配置头信息
htmlheader = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
req = urllib.request.Request(url=weburl, headers=htmlheader)
# 获取url内容
html = urllib.request.urlopen(weburl)
data = html.read()
# 转换格式
data = data.decode('UTF-8')
# 得到一个包含警报,入侵,虚空裂缝,突袭,平原是不是白天,商人什么时间离开的字典
dict = json.loads(data)
return dict
说明一下,因为直接拿到的数据是json类型的,所以我们要把转换成python中的字典,方便处理,转换格式是为了让汉字显示出来。
既然拿到了数据我们就来处理一下吧。
[Python] 纯文本查看 复制代码 def jingbao():
# 从字典中吧警报任务提取出来,取出来是一个列表
jb = getlist()['alerts_raw']
for name in jb:
# 分别取出列表的元素
xingqiu = name[2]
ditu = name[1]
renwu = name[3]
xibie = name[4]
ddengji = name[5]
gdengji = name[6]
ktime = name[7]
jtime = name[8]
wpjiangli = name[9]
jinqian = name[11]
# 获取本地时间戳
time_now = int(time.time())
# 得到时间戳差
cha = jtime - time_now
# 用求余的方式得到相差时间的秒数
miao = cha % 60
# 计算出有多少分钟
fenzhong = cha / 60
# 用求余的方式得到相差时间的分钟数
fenzhongd = fenzhong % 60
# 判读如果大于60分钟就求有多少小时
if fenzhong >= 60:
# 用整除的方式得到有多少小时
xiaoshi = fenzhong // 60
print(xingqiu + '(' + ditu + ')' + renwu + '任务:' + '\n 奖励物品:' + wpjiangli + '\n 现金奖励:' + jinqian)
print(' 怪物等级:' + str(ddengji) + '-' + str(
gdengji) + '\n 怪物系别:' + xibie)
print(' 剩余时间:' + str(int(xiaoshi)) + '小时' + str(int(fenzhongd)) + '分钟' + str(int(miao)) + '秒')
# 变量归零,免得影响其他数据
fenzhong = 0
xiaoshi = 0
fenzhongd = 0
下面调用函数就可以了
[Python] 纯文本查看 复制代码 jingbao()
运行完成,放一张成果图,源代码也传上来,里面有一点变动,但是不影响,谢谢大家
成果
|