网址: http://match.yuanrenxue.com/match/13
抓取这5页的数字,计算加和并提交结果
preserve log :保留请求日志,跳转页面的时候勾选上,可以看到跳转前的请求,也可适用于chrome开发者工具抓包的问题
使用python requests的session
先请求一次URL,网页上的内容 是一个js,设置cookie,并跳转。
我们需要获取 这个cookie的key 和 value,然后更新我们session的cookie信息。
<script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('6')+('0')+('6')+('4')+('4')+('1')+('7')+('8')+('7')+('|')+('7')+('u')+('q')+('r')+('2')+('t')+('3')+('6')+('6')+('w')+('5')+('B')+('k')+('t')+('j')+('c')+('t')+('h')+('A')+('Z')+('Y')+('d')+('S')+('A')+('9')+('U')+('e')+('m')+('m')+('J')+('d')+('R')+('L')+('X')+('Y')+('u')+('A')+('e')+('g')+('J')+('k')+('B')+('B')+('m')+('g')+('H')+('Y')+';path=/';location.href=location.pathname+location.search</script>
然后在访问 API。
其中第4、5页需要设置指定的User-Agent
。
# -*- coding: utf-8 -*-
# @Time : 2020/10/24 21:25
# @Author : gitsilence
import requests
from requests.sessions import cookiejar_from_dict, merge_cookies
import execjs
import re
"""
题目:抓取这5页的数字,计算加和并提交结果
http://match.yuanrenxue.com/match/13
1. 一共5页数据,其中第4、5页需要指定 浏览器User-Agent
2. cookie时效性 很短。
3. http://match.yuanrenxue.com/match/13 第一次访问的时候,网页中的content 的脚本 会设置cookie,
"""
def getCookie():
pass
url = "http://match.yuanrenxue.com/api/match/13?page=%s"
headers = {
"User-Agent": "yuanrenxue.project",
}
session = requests.session()
res = session.get("http://match.yuanrenxue.com/match/13")
"""
{'Server': 'nginx', 'Date': 'Fri, 27 Nov 2020 01:49:47 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Cookie', 'Set-Cookie': 'sessionid=hqo0klger2uoingf606qccgnxrneb1tf; expires=Fri, 27 Nov 2020 07:49:47 GMT; HttpOnly; Max-Age=21600; Path=/; SameSite=Lax', 'Content-Encoding': 'gzip'}
<script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('6')+('0')+('6')+('4')+('4')+('1')+('7')+('8')+('7')+('|')+('7')+('u')+('q')+('r')+('2')+('t')+('3')+('6')+('6')+('w')+('5')+('B')+('k')+('t')+('j')+('c')+('t')+('h')+('A')+('Z')+('Y')+('d')+('S')+('A')+('9')+('U')+('e')+('m')+('m')+('J')+('d')+('R')+('L')+('X')+('Y')+('u')+('A')+('e')+('g')+('J')+('k')+('B')+('B')+('m')+('g')+('H')+('Y')+';path=/';location.href=location.pathname+location.search</script>
"""
js_script = res.content.decode("utf-8")
print(js_script)
regex = re.compile("cookie=(.+)\\+\\'")
js_script = re.findall(regex, js_script) # 获取Cookie
key_value = eval(js_script[0])
dic_cookie = {key_value.split("=")[0]: key_value.split("=")[1]}
cookie = cookiejar_from_dict(dic_cookie) # dic 转 cookiejar
merge_cookies(session.cookies, cookie) # 合并cookie
print(session.cookies) # 这里已经更新了cookie
# 获取API 的数据
sum = 0
for i in range(1, 6):
datas = session.get(url % i, headers=headers).json()
print(datas)
for data in datas['data']:
sum += data['value']
print("最终求和结果:", sum)
# Cookie分析 样例
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441370|RM0Qy7u43lQvOKO1OuxsE2GVpbkvbYE8AsZhYMcpBRcvUMSZjqPlWIqhvehwTXrQD2aRovXrLu91Jl0lqsWclSfsG83t7ZAoC2oF2kzm4dglXL0V7Dx1TILWZCiFOFwZX3ZLZqNQSaHCK60ByP8uxlLkAc1iZPsLytEI0uvhafsrEBQ5DOzKZ6; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441370
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441370|RM0Qy7u43lQvOKO1OuxsE2GVpbkvbYE8AsZhYMcpBRcvUMSZjqPlWIqhvehwTXrQD2aRovXrLu91Jl0lqsWclSfsG83t7ZAoC2oF2kzm4dglXL0V7Dx1TILWZCiFOFwZX3ZLZqNQSaHCK60ByP8uxlLkAc1iZPsLytEI0uvhafsrEBQ5DOzKZ6; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441370
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441370|RM0Qy7u43lQvOKO1OuxsE2GVpbkvbYE8AsZhYMcpBRcvUMSZjqPlWIqhvehwTXrQD2aRovXrLu91Jl0lqsWclSfsG83t7ZAoC2oF2kzm4dglXL0V7Dx1TILWZCiFOFwZX3ZLZqNQSaHCK60ByP8uxlLkAc1iZPsLytEI0uvhafsrEBQ5DOzKZ6; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441376
#
#
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441376; yuanrenxue_cookie=1606441460|AM5GaAvsZckUMgZE3LNLzjcaMwWWQCrRrZam9vvk6wJ9AELJPSXMLdxvG3H
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441460|AM5GaAvsZckUMgZE3LNLzjcaMwWWQCrRrZam9vvk6wJ9AELJPSXMLdxvG3H; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441460
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441460|AM5GaAvsZckUMgZE3LNLzjcaMwWWQCrRrZam9vvk6wJ9AELJPSXMLdxvG3H; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441460
#
#
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441544|qrABqGTIGrI9dE18uXiKp5iRexMBFKtGLGNcTnbuCnBjBKrsWkdmo2QvRrnYhHxBzMIZXm2qGjbh; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441544
# sessionid=48gfcmu2fqoz2b5vhld22vstdjq0tcfs; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1606438848; qpfccr=true; no-alert=true; yuanrenxue_cookie=1606441544|qrABqGTIGrI9dE18uXiKp5iRexMBFKtGLGNcTnbuCnBjBKrsWkdmo2QvRrnYhHxBzMIZXm2qGjbh; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1606441544
<script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('6')+('0')+('6')+('5')+('5')+('2')+('3')+('2')+('5')+('|')+('m')+('Q')+('V')+('0')+('o')+('B')+('V')+('C')+('V')+('6')+('Z')+('2')+('R')+('b')+('o')+('H')+('s')+('V')+('t')+('h')+('P')+('h')+('b')+('M')+('8')+('3')+('D')+('p')+('Z')+('Z')+('8')+('3')+('Y')+('G')+('o')+('c')+('r')+('x')+('t')+('M')+('3')+('t')+('6')+('P')+('2')+('M')+('6')+('0')+('A')+('K')+('l')+('O')+('I')+('B')+('Q')+('i')+('g')+('L')+('4')+('h')+('V')+('F')+('O')+('9')+('c')+('E')+('q')+('a')+('G')+('s')+('K')+('M')+('z')+('K')+('1')+('h')+('Z')+('F')+('Z')+('F')+('W')+('F')+('O')+('t')+('C')+('M')+('N')+('y')+('c')+('l')+('q')+('D')+('M')+('6')+('9')+('O')+('T')+('n')+('1')+('9')+('Y')+('n')+('u')+('s')+('k')+('3')+('e')+('X')+('K')+('D')+('U')+('v')+('4')+('9')+('G')+('2')+('b')+('U')+('F')+('M')+('d')+('8')+('I')+('6')+('N')+('O')+('S')+('0')+('p')+('P')+('W')+('H')+('r')+('q')+('d')+('V')+('6')+('g')+('n')+('B')+('W')+('T')+('e')+('W')+('N')+('0')+('j')+('z')+('p')+';path=/';location.href=location.pathname+location.search</script>
<RequestsCookieJar[<Cookie yuanrenxue_cookie=1606552325|mQV0oBVCV6Z2RboHsVthPhbM83DpZZ83YGocrxtM3t6P2M60AKlOIBQigL4hVFO9cEqaGsKMzK1hZFZFWFOtCMNyclqDM69OTn19Ynusk3eXKDUv49G2bUFMd8I6NOS0pPWHrqdV6gnBWTeWN0jzp for />, <Cookie sessionid=24xjs0zizw51bwb3nrllv28vpx7v82qs for match.yuanrenxue.com/>]>
{'status': '1', 'state': 'success', 'data': [{'value': 5900}, {'value': 1836}, {'value': 3620}, {'value': 2931}, {'value': 5143}, {'value': 9694}, {'value': 5259}, {'value': 2302}, {'value': 2744}, {'value': 753}]}
{'status': '1', 'state': 'success', 'data': [{'value': 6276}, {'value': 6782}, {'value': 834}, {'value': 1238}, {'value': 81}, {'value': 9528}, {'value': 7213}, {'value': 8388}, {'value': 6071}, {'value': 1368}]}
{'status': '1', 'state': 'success', 'data': [{'value': 1728}, {'value': 9544}, {'value': 8528}, {'value': 4339}, {'value': 202}, {'value': 4272}, {'value': 2412}, {'value': 7445}, {'value': 2475}, {'value': 3367}]}
{'status': '1', 'state': 'success', 'data': [{'value': 7218}, {'value': 3429}, {'value': 9857}, {'value': 5408}, {'value': 3633}, {'value': 854}, {'value': 3885}, {'value': 1407}, {'value': 5138}, {'value': 1873}]}
{'status': '1', 'state': 'success', 'data': [{'value': 407}, {'value': 3781}, {'value': 3108}, {'value': 668}, {'value': 4793}, {'value': 1019}, {'value': 7439}, {'value': 6946}, {'value': 3404}, {'value': 6593}]}
最终求和结果: 213133