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

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

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

    545 引用 • 672 回帖
  • 爬虫

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

    106 引用 • 275 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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