js逆向系列之猿人学爬虫第13题
生活随笔
收集整理的這篇文章主要介紹了
js逆向系列之猿人学爬虫第13题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 目標網址
- 2. 抓包分析
- 3. 編碼測試
1. 目標網址
目標網站:猿人學web第13題
2. 抓包分析
瀏覽器打開無痕模式,看第一頁數據包:
兩個名叫13的包,第二個有數據,是請求了一個api接口,第一個推斷應該是加載了cookie。
點一下第二頁:
發現抓不到這個包,說明有cookie驗證。
我們不用無痕窗口看一下第二頁:
發現是可以看的,所以接下來我們的解決思路就有了,我們先直接對這個網站發請求:
import requestssession = requests.Session() headers = {"User-Agent": "yuanrenxue.project", }url = "http://match.yuanrenxue.com/match/13" r = session.get(url) print(r.text)結果:
<script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('6')+('4')+('8')+('1')+('8')+('5')+('0')+('8')+('2')+('|')+('9')+('I')+('B')+('q')+('4')+('J')+('X')+('j')+('u')+('e')+('i')+('R')+('B')+('Q')+('V')+('C')+('T')+('x')+('j')+('E')+('m')+('u')+('C')+('G')+('r')+('K')+('m')+('E')+('A')+('W')+('8')+('r')+('B')+('q')+('H')+('x')+('w')+('b')+('l')+('b')+('m')+('p')+('r')+('p')+('Y')+('y')+('X')+('m')+('2')+('e')+('z')+('6')+('K')+('L')+('g')+('T')+('s')+('b')+('E')+('N')+('J')+('j')+('E')+('M')+('D')+('z')+('L')+('I')+('7')+('V')+('5')+('Y')+('5')+('V')+('A')+('J')+('M')+('4')+('f')+('D')+('4')+('Q')+('G')+('2')+('9')+('M')+('C')+('u')+('8')+('B')+('P')+('c')+('1')+('1')+('7')+('c')+('d')+('w')+('v')+('m')+('V')+('D')+('v')+('W')+';path=/';location.href=location.pathname+location.search</script>發現響應里面是分開湊的cookie,我們看一下第一頁第一個包的cookie:
是有這個yuanrenxue_cookie的,接下來我們就只需要把cookie拼接完整,
然后拿到這個cookie,再用它保持會話狀態去向其他頁發請求應該就可以了。
3. 編碼測試
注意:第四頁和第五頁的數據必須要用賬號登錄,把cookie放到程序里才可以拿到,并且sessionid必須在瀏覽器一直是登錄狀態才有效,一旦退出登錄,sessionid會失效
這里先拿前三頁:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : 冰履踏青云 # @File : 13.py import requests import re import jsonpathdef get_data(page):session = requests.Session()headers = {"User-Agent": "yuanrenxue.project",}url = "http://match.yuanrenxue.com/match/13"r = session.get(url)# print(r.text)results = re.findall("'([a-zA-Z0-9=|_])'",r.text)# print(results)cookie = ''.join(results)# print(cookie)key, value = cookie.split('=')session.cookies.set(key, value)api_url = 'https://match.yuanrenxue.com/api/match/13?page={}'.format(str(page))res = session.get(api_url,headers=headers)# print(res.json())values_list = jsonpath.jsonpath(res.json(),"$..value")return values_listif __name__ == '__main__':res_list = []for i in range(1, 4):values_list = get_data(i)res_list.extend(values_list)print(res_list,len(res_list))print('前三頁所有數字之和為:',sum(res_list))結果:
我再登錄一下,把cookie復制一下,把五頁全部拿完:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : 冰履踏青云 # @File : 13.py import requests import re import jsonpathdef get_data(page):session = requests.Session()# 每次請求cookie都加上sessionidrequests.utils.add_dict_to_cookiejar(session.cookies, {"sessionid": "t0yfp9ec52jvopntggd4ifxbbdwt3eg0"})headers = {"User-Agent": "yuanrenxue.project",}url = "http://match.yuanrenxue.com/match/13"r = session.get(url)# print(r.text)results = re.findall("'([a-zA-Z0-9=|_])'",r.text)# print(results)cookie = ''.join(results)print(cookie)key, value = cookie.split('=')session.cookies.set(key, value)cookie = {"cookie":"sessionid=t0yfp9ec52jvopntggd4ifxbbdwt3eg0"}api_url = 'https://match.yuanrenxue.com/api/match/13?page={}'.format(str(page))res = session.get(api_url,headers=headers)# print(res.json())values_list = jsonpath.jsonpath(res.json(),"$..value")return values_listif __name__ == '__main__':res_list = []for i in range(1, 6):values_list = get_data(i)# print(values_list)res_list.extend(values_list)print(res_list,len(res_list))print('所有數字之和為:',sum(res_list))結果:
這里代碼只需要換上你自己登錄之后的sessionid就可以了,這個sessionid每次登錄都不一樣,退出登錄就會失效,所以運行程序時瀏覽器要保持登錄狀態。
文章到此結束,但愿本文能對你有一點點幫助,歡迎三連,點個贊,收個藏啥的,有問題的盡管砸來,我有故事你有酒,好好交流不分手!下次見!
總結
以上是生活随笔為你收集整理的js逆向系列之猿人学爬虫第13题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三丰云服务器
- 下一篇: 杜教筛如何推式子/堆柿子