yuan893720647 发表于 2018-5-15 21:17

【python】+warframe警报任务查询(第一次写爬虫,大佬不要笑话)

本帖最后由 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,里面可以看到链接地址。

代码编写:准备工作是多了点(不过是有必要的),不过我们现在开始吧(不准吐槽我的命名)。
需要的模块
import json
import time
import urllib.request
把数据拿到本地:
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中的字典,方便处理,转换格式是为了让汉字显示出来。
既然拿到了数据我们就来处理一下吧。
def jingbao():
      # 从字典中吧警报任务提取出来,取出来是一个列表
      jb = getlist()['alerts_raw']
      for name in jb:
                # 分别取出列表的元素
                xingqiu = name
                ditu = name
                renwu = name
                xibie = name
                ddengji = name
                gdengji = name
                ktime = name
                jtime = name
                wpjiangli = name
                jinqian = name
                # 获取本地时间戳
                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
下面调用函数就可以了
jingbao()

运行完成,放一张成果图,源代码也传上来,里面有一点变动,但是不影响,谢谢大家


yuan893720647 发表于 2018-11-17 15:28

huaizhu123 发表于 2018-11-16 21:25
最近也在玩,不多不懂大佬弄这个是干嘛,有没有什么方彪看懂的话

就是用来看报警的一个脚本,网上这样的网站很多的,我放在手机上,随时可以看有没有自己想要的奖励,有我就上线 。

yuan893720647 发表于 2019-2-13 17:04

Guozhi_s 发表于 2019-2-6 11:25
大佬 我也想写一个你这样的看警报的程序我已经在 “云乡”哪里申请到了 API 你可以教教我吗

我这个太简单了,就是抓的别人网站的数据的,本质就是一个爬虫

wilmeryu 发表于 2018-5-15 22:00

牛逼。。

tzzhj1 发表于 2018-5-15 22:19

又一位准备点燃神火的大佬,我等凡人仰望中

memory947 发表于 2018-5-16 10:03

目前也在学Python 加油中

lmc1998913 发表于 2018-6-14 15:16

不是有个手机app么

honb1 发表于 2018-7-22 14:31

厉害哎厉害

woodeaster 发表于 2018-7-23 19:55

高举王座,送大佬上天

超能力患者 发表于 2018-10-13 23:55

PY格式是什么意思

someonedeng 发表于 2018-10-21 23:32

这个官方好像提供了api接口。。。

佐指环 发表于 2018-10-23 09:14

谢谢,刚好需要
页: [1] 2
查看完整版本: 【python】+warframe警报任务查询(第一次写爬虫,大佬不要笑话)