如下示例:
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 获取到的数据与浏览器获取到的数据不一致。不明白是为什么。
1
noe132 2019-05-06 10:01:16 +08:00
ie 会自作主张缓存 ajax 的 get 请求。
url 变一下就不会每次请求一样的 url,就不会出现缓存问题了。 |
2
Dark1X OP 我用 Chrome 和 Firefox 也发现 URL 后面会自动追加这个数字了。
|
3
Dark1X OP 我理解这个数字是为了防止浏览器缓存用的,只是不知道这个数字是在什么时候加上去的?
猜想:是 jQuery 自动加上去的吗? 追问: 1. 这个类似时间戳的数字的生成逻辑在哪里、在 Python 爬虫里这个数字的值该如何构造? 2. 在 Python 爬虫中我尝试了随机修改这个数字,发现与浏览器获得的数据还是不一致。爬虫获取数据的时间与浏览器获取数据的时间相差不到 10 秒,而且我在短时间内再次刷新浏览器页面,发现两次刷新浏览器页面呈现的数据没有变化,所以排除在爬虫获取数据期间与浏览器获取数据期间服务端后台数据发生变化的可能。 |
4
ochatokori 2019-05-06 10:28:42 +08:00 via Android 1
这是前端开发人员加上去的,不是 jq 或者 ajax 自己加上去的
作用可能有两个 一个是 1 楼说的缓存问题 一个是可能是签名的参数 你写爬虫直接生成时间戳就好了,不是要和浏览器一样,特别是当这个只是用来防止缓存的时候你甚至可以不要这个参数 |
5
nekoneko 2019-05-06 10:37:20 +08:00
大部分情况下是 1 楼说的那样
|
6
w292614191 2019-05-06 10:39:34 +08:00
jq 并不会做额外的事情。
一般都是 UI、框架、某些控件之类的做的。 |
7
Dark1X OP @ochatokori 感谢
我在测试的时候发现爬虫不加这个签名参数也是可以的。 现在的问题是浏览器上面获取的的数据与爬虫获取到的数据不一致。你有空的话复现帮我看看呀,麻烦了。 浏览器访问: https://wk588.com/tools/kuangjiduibi |
8
Dark1X OP @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]) ``` |
9
Dark1X OP |
10
ochatokori 2019-05-06 11:23:58 +08:00 via Android
@Dark1X 我不太会 python 和爬虫,如果你确认你的请求没错的话可能遇到高级反爬:假数据( v 站就是这样
|
11
Dark1X OP @ochatokori 高级反爬? 看样子应该试试开发个 Chrome 插件抓取渲染之后的数据了。
|
12
BCy66drFCvk1Ou87 2019-05-06 15:34:37 +08:00
用来欺骗浏览器,获取新数据
|