AJAX GET 请求 URL 最后面缀的那个类似于时间戳的参数是什么啊?

2019-05-06 09:55:47 +08:00
 Dark1X

AJAX GET 请求 URL 最后面缀的那个类似于时间戳的参数是什么啊?

如下示例:
URL: https://wk588.com/tools/json/kjdbapi.php?n=Bitcoin&dj=0.4&=1557104461614
这个 URL 中,
=1557104461614,这个参数是什么?看起来像是时间戳,但实际上并不是时间戳。我重复刷新页面这个类似于时间戳的数字有时候会自动加 1,有时候干脆重新生成一个以 15571 开头的其他数字。

追加问题:
现在我需要使用 Python Requests 模块来做爬虫,发现请求 "https://wk588.com/tools/json/kjdbapi.php?n=Bitcoin&dj=0.4&_=1557104461614" 这个 URL 获取到的数据与浏览器获取到的数据不一致。不明白是为什么。

2020 次点击
所在节点    问与答
12 条回复
noe132
2019-05-06 10:01:16 +08:00
ie 会自作主张缓存 ajax 的 get 请求。
url 变一下就不会每次请求一样的 url,就不会出现缓存问题了。
Dark1X
2019-05-06 10:13:51 +08:00
我用 Chrome 和 Firefox 也发现 URL 后面会自动追加这个数字了。
Dark1X
2019-05-06 10:19:28 +08:00
我理解这个数字是为了防止浏览器缓存用的,只是不知道这个数字是在什么时候加上去的?
猜想:是 jQuery 自动加上去的吗?
追问:
1. 这个类似时间戳的数字的生成逻辑在哪里、在 Python 爬虫里这个数字的值该如何构造?
2. 在 Python 爬虫中我尝试了随机修改这个数字,发现与浏览器获得的数据还是不一致。爬虫获取数据的时间与浏览器获取数据的时间相差不到 10 秒,而且我在短时间内再次刷新浏览器页面,发现两次刷新浏览器页面呈现的数据没有变化,所以排除在爬虫获取数据期间与浏览器获取数据期间服务端后台数据发生变化的可能。
ochatokori
2019-05-06 10:28:42 +08:00
这是前端开发人员加上去的,不是 jq 或者 ajax 自己加上去的

作用可能有两个
一个是 1 楼说的缓存问题
一个是可能是签名的参数

你写爬虫直接生成时间戳就好了,不是要和浏览器一样,特别是当这个只是用来防止缓存的时候你甚至可以不要这个参数
nekoneko
2019-05-06 10:37:20 +08:00
大部分情况下是 1 楼说的那样
w292614191
2019-05-06 10:39:34 +08:00
jq 并不会做额外的事情。
一般都是 UI、框架、某些控件之类的做的。
Dark1X
2019-05-06 10:39:51 +08:00
@ochatokori 感谢
我在测试的时候发现爬虫不加这个签名参数也是可以的。
现在的问题是浏览器上面获取的的数据与爬虫获取到的数据不一致。你有空的话复现帮我看看呀,麻烦了。
浏览器访问: https://wk588.com/tools/kuangjiduibi
Dark1X
2019-05-06 10:43:44 +08:00
@ochatokori 感谢
我在测试的时候发现爬虫不加这个签名参数也是可以的。
现在的问题是浏览器上面获取的的数据与爬虫获取到的数据不一致。你有空的话复现帮我看看呀,麻烦了。
浏览器访问: https://删除这几个字 wk588.com/tools/kuangjiduibi
爬虫源码:
```
#!/usr/bin/env python3
# coding=utf-8

import requests
import json
import re

def getPage(url):
response = requests.get(url=url)
return response.text

if __name__ == '__main__':
headers = {
'User-Agent':'Mozilla/6.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.84 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'en-GB,en-US;q=0.8,en;q=0.6'
}

jsonData = getPage('https://删除这几个字 wk588.com/tools/json/qbkuanjiapi.php?n=Bitcoin&dj=0.4&_=1557106802754')
#print(json.loads(jsonData))
minerInfoList = json.loads(jsonData)['data']

# 矿机名称列表
nameList = []
# 算力列表
hashRateList = []
# 功耗列表
powerConsumptionList = []
# 能耗比列表 HashPowerConsumptionRatio
hpcRatioList = []
# 日产值列表
dailyEarnList = []
# 日电费列表
powerChargeList = []
# 电费占比列表
powerChargeRateList = []
# 每日净收益列表
dailyRetainedProfitList = []
for miner in minerInfoList:
if miner['sh'] == 'SHA-256':
minerName = re.sub('<\w.*?\s.*?>.*?','',miner['name'],2)
nameList.append(minerName)
hashRateList.append(miner['kjsn']['xs'])
powerConsumptionList.append(miner['kjgh']['xs'])
hpcRatioList.append(miner['kjdwgh']['xs'])
dailyEarnList.append(miner['rcz']['xs'])
powerChargeList.append(miner['rcdf']['xs'])
powerChargeRateList.append(str(miner['dfzb']['sz'])+'%')
dailyRetainedProfitList.append('¥'+str(miner['rcsy']['sz']))

print(len(nameList))

for i in range(len(nameList)):
print('%-20s' % nameList[i] + '\t' + hashRateList[i] + '\t\t' + powerConsumptionList[i] + '\t\t' + dailyEarnList[i])
```
Dark1X
2019-05-06 10:46:11 +08:00
ochatokori
2019-05-06 11:23:58 +08:00
@Dark1X 我不太会 python 和爬虫,如果你确认你的请求没错的话可能遇到高级反爬:假数据( v 站就是这样
Dark1X
2019-05-06 11:29:40 +08:00
@ochatokori 高级反爬? 看样子应该试试开发个 Chrome 插件抓取渲染之后的数据了。
HuasLeung
2019-05-06 15:34:37 +08:00
用来欺骗浏览器,获取新数据

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/561341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX