【袁人学爬虫刷题平台】(一)入门级 Cookie

本贴最后更新于 1606 天前,其中的信息可能已经时移世异

网址: http://match.yuanrenxue.com/match/13

抓取这 5 页的数字,计算加和并提交结果

image.png

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
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 675 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...