您现在的位置是: 网站首页> 学习笔记> JS逆向 JS逆向

猿人学-第一届Web端爬虫攻防大赛第三题

2021-01-25 [JS逆向] [猿人学刷题] 3712人已围观

刷题地址:http://match.yuanrenxue.com/match/3

这题看起来简单,但是有个坑卡了好久;

多点几次请求,不难发现每次请求数据之前都会先去请求一个logo的链接;

如果我们不请求这个logo链接,直接去请求数据页面,会响应一堆js代码, 分析一下,也分析不出个啥来;

模拟浏览器流程,保持会话状态,用session请求两次(先请求logo页面,再请求数据页面); 发现还是取不到正确数据,从浏览器里拷headers、改headers(一个一个的删除,一个一个的加), 另外debug时发现,请求logo页面并没有Set-Cookie,而浏览器里却是有Set-Cookier的,卡住了, 方法试遍了都还是不行,最后没办法只有试着打开fiddler抓包看看有没有啥没抓到的; 发现fiddler抓包与浏览器抓包结果也是一样的,唯一不同的是fiddler里的headers好像与浏览器有些不同;

把fiddler里的headers拷出来请求数据,发现OK了。真的是坑。。 然后又试着把这能请求到数据的headers改来改去,发现改了以后也不能取到数据, 貌似大多请求头都是需要的,而且还有顺序要求。

总结一下,以后直接去fiddler里拷headers好了,免得遇到这种坑卡半天。

python代码

import requests
import json

url1 = 'http://match.yuanrenxue.com/logo'
url2 = 'http://match.yuanrenxue.com/api/match/3?page={}'

headers = {
    'Host': 'match.yuanrenxue.com',
    'Connection': 'keep-alive',
    # 'Content-Length': '0',
    'User-Agent': 'yuanrenxue.project',
    'Accept': '*/*',
    'Origin': 'http://match.yuanrenxue.com',
    'Referer': 'http://match.yuanrenxue.com/match/3',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

if __name__ == '__main__':
    sess = requests.session()
    sess.headers = headers
    values = []
    for page in range(1, 6):
        sess.post(url1)
        res = sess.get(url2.format(page))
        values.extend([val['value'] for val in json.loads(res.text)['data']])
        print(res.text)

    print(values)
    print(max(values, key=values.count))  # 取list中出现频率最高的值

文章评论

暂无评论

添加评论





本栏推荐

站点信息

  • 建站时间:2021-01-01
  • 网站程序:Django 3.1.2
  • 文章统计:53篇
  • 文章评论:31条
  • 统计数据