当前位置:   article > 正文

19、猿人学第四题:雪碧图、样式干扰【Post/Js逆向笔记】_任务4:采集这5页的全部数字,计算加和并提交结果

任务4:采集这5页的全部数字,计算加和并提交结果

目标网址

https://match.yuanrenxue.com/match/4

逆向题目

采集这5页的全部数字,计算加和并提交结果


开始分析 

  1. 打开chrome浏览器 打开开发者工具后,清除缓存,然后刷新页面
  2. 在network面板中,可以看到 返回数据的api

  1. 并且在返回这个的api中 也可以发现一个问题就是 没有直接返回页面中的值

 

  1. info 返回的是 HTML 的字符串
  2. iv: "smohe"
  3. key: "qfnuidgsej"
  4. value: "kK1dv0l2iu"
  5. 返回的是 一些随机字符串 每次刷新 都不一样

然后在 network往下 拉信息的时候,发现了这个

  1. 对应的是 数字的 base64 编码后的 图片
  2. 那么在这里 我们可以想到的是 哦 网页中的数字都是一张张的图片组合起来的
  3. 那么在这里我们可以有一个想法 就是做映射关联
  4. 在python中 建立一个 字典 key的值为 图片的base64编码 value的值就是对应的数字
  5. 然后做判断即可


  1. 我们首先可以从 返回的数据api下手看一下 具体的请求获取的是哪些 数据
  2. 哪些数据是有用的 哪些数据是迷惑人的

  1. 在 api请求数据的 堆栈信息 请求点里面 跟进去看一下
  2. 进去 进行格式化 后,可以看到 是一个ajax的请求

 

  1. 代码也没有加密,可以很清楚的看到一些数据是代表什么意思的
  2. 我大概给大家解释一下 这些代码的含义
  3. 我们可以看到的是 success 中
  4. data 就是 这个api 发送回来的包 其中
  5. ================================
  6. datas = data.info 就是 返回的 info值 赋值给了 datas
  7. $('.number').text('').append(datas);
  8. 就是在网页元素的class 名称为number 把这个datas 添加进去
  9. 这个就是数字图片的返回数据
  10. ================================
  11. var j_key = '.' + hex_md5(btoa(data.key + data.value).replace(/=/g, ''));
  12. 定义了以一个 j_key的变量 把 data中的keyvalue 先进行拼接
  13. 然后进行base64的编码 再把这个编码里面的等于号 进行制空
  14. 最后进行了一个hex_md5的加密 在进行到字符串
  15. ================================
  16. $(j_key).css('display', 'none');
  17. 把包含这个class名称为 MD5值的j_key 的CSS 进行修改
  18. 添加以一个属性为 display:none 的展示效果
  19. 其实就是 不展示
  20. ================================
  21. $('.img_number').removeClass().addClass('img_number')
  22. class 名称为img_number的 删除掉
  23. 并且重新添加一个叫做 img_numberclass

  1. 在这里我们可以看到很多关于前端操作的一些代码,毕竟这道题目是css加密
  2. 所以我们可以在elements的面板中看看有没有什么新的发现

  1. 可以看到 每一个 <td></td>标签 包裹的就是 一组数字
  2. 并且 其顺序都还是不一样的 而且显示的数量也是不一样

 

  1. 当然我们也可以看到 style的样式 直接明了的看到了
  2. 不显示的数字图片 style里面都是有 displaynone
  3. 也就是不展出
  4. 并且可以看到 left的属性值 也是不一样的
  5. 越靠近左边的 其数值就越小 有的甚至是负数
  6. 也就是说 越小越排名在前,如果是0的情况就根据展示顺序排序
  7. 那么在这里我们就可以通过数值的大小 来判别数字的排序问题了

脚本编写逻辑

  1. 开始的话,我们可以先建立一个字典,字典的key值为图片的base64的编码值,value就是对应的数字
  2. ====================================
  3. 然后 做 api的请求 获取 data.info 的值 也就是 返回的一大串的字符串
  4. 我们可以通过正则去匹配出每页的十组图片数据
  5. 可以建立一个list 列表 来存放这个数据
  6. ====================================
  7. 然后我们获取 data.keydata.value 的值 然后进行 base64的编码 判断 编码是否有=
  8. 如果存在就替换为空,在进行一次md5的加密 这个MD5比较好扣
  9. 通过测试 网页中的MD5的加密 是普通的MD5加密,没有进行魔改
  10. 自己可以通过一些第三方库 直接使用
  11. ====================================

  1. 通过格式化 info的数据 我们是可以看到 每条图片数据中都有 一个MD5值产生
  2. 那么我们就可以通过 查找判断的方式 获取到不一样的MD5值的图片的数据
  3. 因为之前我们分析过知道 如果图片的MD5值 如果和 j_key 的 值一样的话
  4. 就会添加 display:none的属性 也就是不展出 我们获取不一样的MD5知道数据即可
  1. 然后把 获取到的展示图片的数据 重新存放到一个列表里面
  2. 这个时候 就需要进行 style left 的数值大小的判断了
  3. 数值越小 排名越前 如果都是0的情况那么就按照顺序排
  4. 这个时候还是需要通过正则的方式去提取 style left的值
  5. 获取到后 进行排序
  6. =========================================
  7. 排序好后,然后通过最初的图片映射 吧之前对应的图片编码值 和 数字对应来进行获取
  8. 最后进行相加即可

脚本参考

  1. # coding:utf-8
  2. # @Author : Steven
  3. # @QQ : 2621228281
  4. # @Email : 2621228281@qq.com
  5. import requests
  6. import base64
  7. import re
  8. import hashlib
  9. num_dict = {
  10. 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAMTSURBVEhLrZY/TBNRHMe/bY82LeGA0Dp4NTGYqO1gdKEMwmQcGh38M5CQlGDSwWiMAwwYg2iCJsZJQ9CJ0ETsQMJgwuagLIUFXIAFXNoYcqDloLRXrq3v7v3aXktbSPCTXO77fZRvf/feu9+r5dz5iwX8R+oESigMPka6/wb2vSJUBx+1QoVD3kTz7DScb+f4YBVHA6U+ZKLPsON1IE9DtbDLP9AxEIawRgOEle4cKYSD+ZeQq8IcKquMXTbyOllPL7aiEWgSDRCmQAnahyHsiGQZruUvkIKXcObyFeM62zcOd1ylvwJ5MYDkuxA5Tjlw8A2S12iyGM7YODrujsFqfqTFCJw9L+CWyTPS3QPIBMgwKFBC9n4AaW4AdQVtQxEy1czBObkIJznAi9TDO6SLgVIYqt9QBq5YFEKCTC2momg2VXngD5bmnAc+uIqUIXQUOL/X3hJl5mHfUEgzPJ04pMUxAnN+CYeG1UlAmCLZANtqAk2kARG5m1zxQI9paWUZAsmGsArLnxOh0ZSxwCBypjwo2zQPxzCTgJ2kTtbbZ9zZ/7pRKO8WOOWqrX9iePyJiqnNGgTTuhRhgT5o5kc+JaeosDYssHbpx+OtXEziSIWqx0fqOFpg7ns2Zd24s8B1WE0V5h2mJW/ELTc0kjo2Zcm4s8ClikCIlR+si59tZpL66yosc2U8clM8bhgDkfVFUzuqR569rqXOqG7CPsOlEWiJJSraUaa/i3Q9upC94CHNCtr4WXoN+aJMzcFlakd73eGG5wnuhZHykmZ1tnx9TboYqDfNWLxoWDvqhfK+h0w1Pcg87cUBOavMmu1HMoxShuXJNNpNi7N3ewLJTyEUzIdQIIT0wgQ7EcmzxWifZMcEOZ3KY3Qwgp3RQOnbOfqJx5XGtlSOS4aK1tlHEIcXyHNsrW0dY6SBFX0ufShc70S21OwE5AR+lb+ZVfb5OVpGviGTTkHeSmBfScJqtdX55SAFoY0OsMXxISM6SvvNrshwrS7A9WoENupyv+O/oGm831sslno/RU6OsvsHu3+3yQH/AOyW6SvqnweCAAAAAElFTkSuQmCC':0,
  11. 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAD0SURBVEhLY5RVUPvPQGXABKUJAA2GvzP3Mry6f5PhzfI4qBhuQNjQqD6Gzxc3Mjxzk2H4CRUiBHAYKs3wP7Gd4evhSwzPWr0ZPvBBhYkEqIaaBzL8nrmS4f3FfQzP6oIY3smwM/yFSpECkAyNY/g2q4PhhZsBwxegy/5BRZlfP2HgIdbfUIAnTD8xCGyuZ5AyW8jATqmhzD9fMwjumsUgbWPKwJu3AipKGkAydC8DZ24sg5SGDQNPei8D01OoMBkAydCnDIyHTkHZlAE8YUo+GDWU+mAEGfq46RCUhQAUGypbZwdlIcBoRFEfjBpKfUADQxkYAKYHOb9g+7HMAAAAAElFTkSuQmCC':1,
  12. 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAKCSURBVEhLrZZLaBNRFIb/PDp5SFMxjqVOAjYLNUGUbhI3cdEGwaAgbmopWFIQBEUwFhQVldIqCuqilLoymEVVlCqWuNdVXRk31Y1uTKAQMRI0ycQk453JaWaSJjYPPxjmnJPwcefOuSfROXftlvAfaSAUIIXOITfuR9bBQzQBZfqEEzPgVuPY8uIeuMXPVK2lVnjoCrKzJ5F2mKqSZpi/xGCfCEOfpAKhCkPz+HEpgN9sRVpMoqjcJZMJBSVS0Wfeoz94CkaNVE93wOOqygyZr9i+cBnOwT3YsXe/cvUPDsMxHcPWTOU7MmWbD+m5i5RVUIUKGfQt38DOA0dgufuSauskoYuE0RuchV0jzQ8FIAqUMFShmIB9+jhs559SoQnJKKwLcZgpBVwoTFLIUIXXTsMaqdvhZjz8qBECRYeXog2P3CoJts8UMko2F0UdC90o2ihkcAl1mzoTnnGh0kwyGRhXKWR0IBRQOOZGnjL57RsjFDLaF87MI+1Ru9+ysgSOYpn2hKEovo+71RMjfoJtKkpJhRaFAsozr5C67kOOKvLe2e+cBVfXaZsLhSD+LD3DGluZum8p5RA06tt/C4/exK83D7A2xKNEJT07UfzV0aaHoImQHnFuDGlNv8kja2BkBObF5ieqgdDf8BG3PboAPrBx/tVTN7H9KMTuI+WxVQesIRUHPzWKnndU2ATNCgUUn9TKrB8eY8DbukxGFYZu4+dBVWZZYXPvxC3oKG8VEnqRn1R7rCfBfi/Gahu2VSpC3wRyDiViiOhdDre9snUqwsOCZnqkYHhLYSfIb9n5+psESerq6nvOPMylrLDEa7q3C7L7hrVt0z1Fu9Dor0g3AH8BJlTqZkAngxQAAAAASUVORK5CYII=':2,
  13. 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAALaSURBVEhLrZVPSBRRHMe/O+rOuuaUyRoyBlGQfw5lh9xTekg8qIdMKSsQFKRAD0WUROhBCIlSBD1YQsJKQSB1iRa8VRf1Up4UQiNcRVw1nXVdx3V3euP+ZnZmR9EVP/CY3/vx5sPMe+/3nu3suYsKjhGrUCxB5GErNssKERIEyDzlIYOX/MgY+4r0zm5w85ROwCRU2j1Yu+fGhi7ZG072Iau3Bc6BacrE4ejJ6EKgySyzy+yrdptpIKJ8HlbahrHZKFImjnEcIeHU6FuIlfk4U3AJObstH2L9C7hmJKTQKEBg0h7sUE/DJLT5x5FbeRWZ99kcTVFSY9wDR/kN5Pxkn6vBFyPUTjFhEPYjs6YBqYkiE/NIfTeODOqpyEUNFMUwCNmy7bNyJr5M787pfuwxhwfhh+1YhWIxtgWKGXafh6IYSQuVjssIUgxMwdFLIZGc8IEHKxV5iFL3xGg37AnzfnAtu68jUlYFueIa1i4IiFDaOfYa2XcGqRfHKnzlxVzdeepYSZVmkfXyERwfrGWnktQvc7If6T62yrxhVRKwCvX6jTet3KK8C4EiN5Y6hrEw6YV811rLhzwPRSi19dhqqmFCFzvINPzI7rwN51B8ZQ4pNNA4iNW2UgTpVOL835Fb0qz/atL7EEPNyPrm01+MutwIPaUOI3khw9Y5aTggeISu1FN8RCHm5YQX7fQ8qlDk9WpR4eRlinQhW37rDtgXpc1Yz2xrsYtLg4StCHz+iHD1IazVPQgY6hnSLzgGKGbov6y4irHY58W/T13YKS2grIHCGoTfeLHcV4V1w9V6+v0zwz2j78MuSH9uYp2SKhwbnKbvYB5hJjHOmyo7OdIC4ckP6segL5wAb7rR1Jd5dslrzSxLYQeE6/ktXbYVCmJp0YfghpRQKbWPsVVXjs0iEWGBxzalVXhZQtrMFJwj/eCHJigbY2FuFpFI7EJNvvT2wPf3NxRF1QD/AbAv8WdRHzjKAAAAAElFTkSuQmCC':3,
  14. 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAbCAYAAACTHcTmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAHHSURBVEhLrZW9LwNhHMe/WrT10mrKVE2EROIfUAuTTQxMLISBQSxeIjQSTZRIsYgYhYVRIrWzaCxiMjFVoqjWaatPaR9Pe09bbfT6XHKf5Mn9vne9T+55fs/1qhxtnRRqWD1DcLILSR5Nfg+aR495ktHxoyBDiA8WhOVQJaXeKUgtPCggLrXPs6dsxzePSghLU9sjiBh4qICYtG8fUo8Z6UxNXlEvZc+WRUDaC+LpR5SnhssLGHldjopS6l1BpFWuda9XsEwH5KCAstS5iU/WHHkLSbAerAmtl8JvupH0DOCDN8d4e4q6wyc5VKCslHrdCHdwI7mHZXZHrgX4X9r3d9oElvMN1Io9ZJZ/pL1IeIbz06598KFx8UYOgpRI7fg52UWIdzszbev4Mqp4FKVYOrGJSG6Ts27btmZUTTtHQcrWUVpy4otHk39PuNulyFL7GOJ7hXWsCfhgK/mPVAOTstfwaAEhMz9DHmF1zalexyIcbj81UUqh0TBdr9OS7muDDoRAz4ZBxajmN2dggqJrepKE+g8fWFPvXPkeaPDhE0MzaeIrhpfnAGJRSTvp+1sQJBFHOBTUTppOp7LHzM7STGpusvEK+AUL4d3X/AgqvQAAAABJRU5ErkJggg==':4,
  15. 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAIxSURBVEhLrZU/aBNRHMe/bWKexnoiaSg0FSSCaAfFwT+L7dKloUs7OqRVcHBwcZOCiCAOhk4dxAwdHFRwEEoRSjvoZNqhdDE4tC7aIYmWvOiV1941vnf51dy7S0ou6Qfu+P5+B9/7/e7e+72us+cuVHHE+EzF0jcUzlPQCjyH/itphChUdKub+bcCXv4tVQr7hsp0hmNqWXsob5ek6kWVqUxneNpPw1yfxi+nWo7Y02uIzjkPAuFUWucSrKNqvzEcoUWSAdFNbyewSxJK/SQZEN1U+0kCXaSCopvGGfZJgsv2SQbFY2rI+jqn+Y/ipbYr1dap/WYVWzfra0q98f/nkDDBcWwjj+j7WbC5Fcr6aV6pxG2oEMzAn8EbKDx+ja31jxBytTRCM7WNepVhIWRl6qKEB9tIovDsA8w7fuPWR9/QPezenQAfTmKHUg5iE32To4jkKJYc2r7G5ywiU6PoTWUQK7rKZ0lU7o9TUKN10wPyWUQfLOA0hQrz6jhs0orgporcI0TXXNUacVgkFe2ZSsI/iqT8tG162DBv23RvYICURG4K3xkVmKEZmIOkJWqXhUkrgpsm0tjJjKBCoRqRp+afkK7hMr2I6tgt0g1IXIf94h22l6dRkiPygMjXtzj5kgLCtaOeg3+fQNnR/u1pMaatRUVkYwHxyYfo9pwQTdpncnjol24o0PMpg74Rv6HCZbqC41/y6OG1QeKdpSGZO1HcRGz+FRKpyzgzlaUnXoB/3J2gmVZucHAAAAAASUVORK5CYII=':5,
  16. 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAdCAYAAABFRCf7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAANLSURBVEhLrZZNSFRRFMf/48e8UZtRktFkRsiEdCIKVwaikrlJbZG0MEGDwEWUIPaBQoiIZIJGG4mikoyyIBJKW4gbs4W66WOhtlAXzixq/HzGjG/8eN0378yb+5w3qdAPLnPOmXf/nHfvOfc+U+bR4zL+M/sTrW6F71Ih/CfskAQB2xQ2SyLMU5OwPr+HuEEPRfcSddXB96QeK04BOxQyZg7pWedhJi+GfiOp7sHqwC0s7RKMkyQIwaGfzGdmLFrUAbGlFOsC+ZBwaLwfjqoSZOSeQlpw5MBR1oQjw3NIoKdCGLz+Rfgn72PRTq7khr2tFpbX4TWLwJULTM+QY5Cp/PgGlkOCEJHauYegAieosEuUbUyxU1tDy9c3SOzdQ9AAvWh7ObeOblg7u8k+GJyoA4E8FzbJi5mdhGWCnAPCiVZhM5tMRuLsAFkHJyxakcu6hWy2QcL4pGpW3IR/6AsWZ35iYV4dnvkfWBp7C/+dMvWZ3SglFRzPpuR4WZYRHAtyWsFZ2fFhVha0mPEQFkbljALSoBHO1G7V1hMIQG54Cu+FY6zsVcyhTiI/hOQswq9PfdhyUIChiW7bbWQpOLDOBANMMknppLIcpIc6KasEzrYhJIv0KGPHlo/VrlrydBvFI2CDNXfyu+s4fLkVMdMUDuKBqbcRtvr3SA69BsN/phIByjaKKPvDPQLr7THyDPjcDOuwmxNwYaNBtaKKWse7YSI7GqbO70giWyHgVJdAE431covESipuah/t6fkGMzdNsruCv+FMveuIJzMavpMlEItryIskdGaERYc9XLnYsO0kk2Mr1YG1c3XkRZLgVXc0LDoxAYF7lY28yMm20ZfIbCkij5GfD4mrxFhRPQK5jepjR52XbEW0XCuRaOxcO40/ZLP1g+Wj2tqcKHMesZuRbKVEVl506O4eHRU9WCvWTnPEz47BMqjaOlFMNLJSErVgILsSiyMPsJ3Pp5yLnfY+LHeVclm6kdLWrJWgwR1VCGmkB7+z9V2u9H5wErv3uUZiiEh5xZK5G24UfaZBxiBcaUL6lIhYiigEFLFdgjHsUkztrNEJKvz7Y6K6A76rhfA5lS+TUB1KrHQ8SBztR8LDPpgMemR/nz0HAvgL80YzEyuMQpQAAAAASUVORK5CYII=':6,
  17. 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAHhSURBVEhLrZY9LANhGMf/PprDVQkxyFXSVCKIwYStiZoqhoqEhTCQWCwiBBEDiUTMBpOJhKQDkw1L1YDFxoSlBi2tlurrrn2uH9xX2/sll/6f4X557n3e903LWhxtDCZSTr/mIXXY4thgjSHGwEp76o7amOkdmih8BHcMlDAULz4DW3htSlf8+RIaJn3Fd8i2ZxAiGeK3sK34UrE4oTCP6JAT31TWneyg8jmdixKyNQ/eOCqCF7AuBKgoRigs48NlR5LK+rP1PEnBwuRmfnf8Kn0rUZhQWEfEJU/if3cSBQmTmwN4o6zUnYRxobh2kb5sd7X+PcWXDQvZohthee3EfWedy042F4PCCXzmTLbGf4hKyn8xJtwYRthGGU/gd9OnQgkDwh7EXB2ZU2G5v0TVFRUK6At7xxCzUxbhb/YoKaMrTM724J2yNIxqha2Si47Qi1hndqtw9wHFYUS7+hF2jaeytnDKi2jGFwfv36GcT6JRQMg9ncqaF+zPwTVe+mi84uc2t4+qbhcZjQ49+GrN7BVYHu50ZRLqwt5BxLLLh6qHfUraqAtHnIhSFG8CcGfa05VRFSZahcxRQ/wZllPKOqgIPfi2yzeBSPAVFRT1UBF2I5GzflzwEWWU9TD5zxLwC1sVsHrJiVs0AAAAAElFTkSuQmCC':7,
  18. 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAANtSURBVEhLrZXfS1NhGMe/rumZbR4nOcO2IA1CvQi8UW8y8EJqZCR1IQiKwvRCuiqTfomtkkrqIpN+EFSGNaFECL0IbzQvnH/A6EavNiinJVubO/5a73nPs51zNqf04wPjfJ8X9uV5n/d93ifr8JFjcfxHMhueuYS1dieiFTZIgoAtvihBCAVhnptErvshDAG+qGMHwzJsvh7Cj5MO9vfMGCQ/Ckb6sP/2F1pRMNCXsGPz/Vt8TzEzSiwz/qMFxrbgwEr7I0Tb7LSioDe8OYSVGhHbFOYEZ1DcVIfisuMo4r86ONxTyEsai1jpGcK6xlNj6MRaQznWKTL4p1BU5YLRqy1UAFmvumDtGEN+wlQoR7SnigKd4Qls2EiyDVs/dSGLojRmrsIyF6QAiFQ0ktIaslokspMzMT4gmQFDMEyK1ZO+MqqhL4x9JFn1EK8m+Yeohl4vu2Ok4UCsWa1LOmw3FaWkAbNfvTqaGg4jd86fXAjX34JUS0EK8YGX+FlBARZhfjpJWmfIbnlnHwoX6PiEUiy9mEVkwIV4ubKEWheksVksXSilekvI/9APwcsDTnqn2JsQ81zDikPQFTsdCXmf+2Ht9FCsoMuQE/DAdHkQBeqt2BHz9CDy3XozmZQM7dh+Pozlen3rGViUzRa22COxSWsycj8fcLfA9E69/JoM5T4exTeNWe7CBA6x1rOXKK1XXCK33gSsdBvkfg7eHdX1s5phG8ustxprPJCL3QWxW/+SJLE7Ib25h6WjghKHvCh2tsDIEqUMqxBrT5ixa+3zZDaTCUxCaPXAmtiKWI1f1M+KYXUr1hxcMSRYpvtJ70KgH7k+tdLhGhe/FYphvV1zCHv3cQLjguYlsjn4gSmGooANLv4N+TAUw2AIVF5GIbbaSO7BlqOQFEMK8cdFMRxZhIkLGRGRBhfp3XAhVimSZkbBgMYw8AQmH1ecWGVH2qzQEo3kYfVUGKvqtpA35+EPsmLIDiLn/hQsSsBgs6J3HKHHLYin+p5n47XtLMLP3MleN7DZY+me51rXevE741huLkeM4gQ5bOIp40BgM5qLJAZpEYUdpyHMUKx8FLJunIPtutpaCdZZD8vDPtXM5J/BwUbVTGaHQS9Thu0rF9kUrELEJmKDGSW2J7DTzPbNwzIyiOyPX2lVJYPh3wL8BvLZG6cpuRANAAAAAElFTkSuQmCC':8,
  19. 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAMzSURBVEhLpZZPSBRhGMYfV9dpdV3UHDVXIw1KDUwJVy/VLTAVWugQRJqUpxAkFyuMIBMPWRGYiCGGC7J0KCRKL13Si9pBvKiH9NIYoavgqKvjujt9M/OuM+uustUPvpn3edl9eL/3+7Mbl3fqjIxoFDnhb76Bzcoi7No47FI6QRJxbHYKKQOdSPi8RFmdKIZ2BDt6sHazCNuUiY4E67cXSLvtJq1hojdhx57nPX4fMDOxL3OSMiihwmHzchu8njrSGmGGclc/Vit5BEibxEXw7bdgzy9BZqEyziLP5UH6Cn2AsV3ZBF+DnVTYlBuxNe/CGqcpSHPIdl6DeY60EXsdfCNtWLVp0rQyhhOORrU6vcKOamyEzNgUU4fuRTdTWHIj6fUkLCSDfCl2GrR433CvuAB+ipXqLM8iVzCMd29gFSiGDb4rWi/J0IE9fr88QFhEAoWHMwWzIFLMeplbAaV3ZFiIIPXjb4gXvBQx+Ax1MfUeGuEM1cYKZzMauhFv2Arg2X6k8CgCuRkUKaQgWGOo0CwYHLlS+LocJA7B3oKdMmOfOMi8wdDUy84nxQrrtU8h1egbNpyLkAbr9T1rQO/h5EtYJ0Q9wRVguXsYG30tCFwq1HJ2B4KtPdiY6cfyac3NrD4VJMQpk1ROij7uyJk/dmTIcgxjXT7+aUK27OsFOZN56BWqjIOrf4isWRHxlImOiLSh+0iaJqnCKmTPA4aMpREkVpcjx/UWGdOLSBZDNw0booC0iY/IuVoO6+NxoJjXbyVRK+LwCzYGAp7v+FWprbR5dhDZ1Z1RKowZB/y5+rbhhK/qO2bD/FMncb7kHClGRT07vxRDgGVgSo1iNrTZUnChrIQUm26zA5sUm4QZcJNa/G89bHDD+6SCFkRCem8Vkp9r1114hfbDToaBmlcQH4TMgMSFL0giM4Vww2Z2AqaGsd3qpIQB5We1bxTe7mqsh46ctIjU9kfq/gsRPuWuUfy8XkCCrRzbexTBz0yCpBRMzCzDdRfcgd/mIxdFYveiNsLNOGEMWc6qCDOFA4vCbu7WJmzXOrDF21SjEBz7x2Bm/xisQ90wf5inbCT/dVIiAf4ApbEnkB6qHqsAAAAASUVORK5CYII=':9,
  20. }
  21. #api请求数据
  22. def get_data(page):
  23. url = 'https://match.yuanrenxue.com/api/match/4?page={page}'.format(page=page)
  24. headers = {
  25. 'accept': 'application/json, text/javascript, */*; q=0.01',
  26. 'accept-encoding': 'gzip, deflate, br',
  27. 'accept-language': 'zh-CN,zh;q=0.9',
  28. 'cache-control': 'no-cache',
  29. 'cookie': 'Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1633332370,1633337457,1633440312; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1633458394',
  30. 'pragma': 'no-cache',
  31. 'referer': 'https://match.yuanrenxue.com/match/4',
  32. 'sec-ch-ua': '"Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"',
  33. 'sec-ch-ua-mobile': '?0',
  34. 'sec-ch-ua-platform': '"Windows"',
  35. 'sec-fetch-dest': 'empty',
  36. 'sec-fetch-mode': 'cors',
  37. 'sec-fetch-site': 'same-origin',
  38. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.10 Safari/537.36',
  39. 'x-requested-with': 'XMLHttpRequest'
  40. }
  41. if page == 4 or page == 5:
  42. headers['user-agent'] = 'yuanrenxue.project'
  43. response = requests.get(url,headers=headers,verify=False)
  44. data = response.json()
  45. return data
  46. #INFO数据处理
  47. def get_all_img_lists(data):
  48. all_img_lists = []
  49. img_data = re.findall(r'<td>(.*?)</td>',data['info'])
  50. for i in img_data:
  51. all_img_lists.append(i)
  52. return all_img_lists
  53. def get_md5(data):
  54. key = data['key']
  55. value = data['value']
  56. str_btyle = key+value
  57. str_btyle = str_btyle.encode('utf-8')
  58. j_key = str(base64.b64encode(str_btyle),encoding='utf-8').replace('=','')
  59. j_md5 = hashlib.md5(j_key.encode(encoding='utf-8')).hexdigest()
  60. print(j_md5)
  61. return j_md5
  62. #获取展示图片数据
  63. def get_show_img_lists(all_img_lists,img_number):
  64. update_img_lists = []
  65. #遍历每一组图片数据
  66. for img_list in all_img_lists:
  67. #存放展示图片的数据
  68. img_number_lists = []
  69. img_data = re.findall(r'<img(.*?)">',img_list)
  70. for data in img_data:
  71. if img_number not in data:
  72. img_number_lists.append(data)
  73. update_img_lists.append(img_number_lists)
  74. return update_img_lists
  75. #图片数据排序处理 和 图片编码和数字映射
  76. def img_data_sort(show_img_data):
  77. for img_data in show_img_data:
  78. num_list = []
  79. for data in img_data:
  80. size = float(re.findall(r'style="left:(.*?)px',data)[0])
  81. img_num_data = re.findall(r'data:image/png;base64,(.*?)" class=',data)[0]
  82. img_num = get_img_num(img_num_data)
  83. new_tuple = (size,img_num)
  84. num_list.append(new_tuple)
  85. print('==============================')
  86. print(num_list)
  87. # 排序
  88. num_list = sorted(num_list,key=lambda x:x[0])
  89. print(num_list)
  90. print('==============================')
  91. #数字拼接
  92. real_num_list = []
  93. for num in num_list:
  94. num = num[1]
  95. real_num_list.append(str(num))
  96. num = ''.join(real_num_list)
  97. print('拼接好的数字:',num)
  98. print('==============================')
  99. num_sum_lists.append(int(num))
  100. print(num_sum_lists)
  101. #图片编码映射数字
  102. def get_img_num(img_num_data):
  103. for key,value in num_dict.items():
  104. if img_num_data == key.strip():
  105. # print('数字:',value)
  106. return value
  107. if __name__ == '__main__':
  108. num_sum_lists = []
  109. for i in range(1,6):
  110. data = get_data(i)
  111. all_img_lists = get_all_img_lists(data)
  112. j_key = get_md5(data)
  113. show_img_data = get_show_img_lists(all_img_lists,j_key)
  114. img_data_sort(show_img_data)
  115. #计算所有页数的和
  116. num_sum = sum(num_sum_lists)
  117. print('所有数字的和为:',num_sum)
  118. print('==============================')

  1. 其实这个题目整体来说并不难,难的是编写脚本的时候需要注意的一些细节点
  2. 自己也是一个脚本菜鸟,一看这个脚本只有100多行的代码
  3. 但是自己在写的之前 足足在纸上写了满满的5页纸
  4. 就是为了把这个整体的思路 和 编写的流程给捋通
  5. 搞懂了流程 才可以相对比较顺畅的写下去
  6. ====================================================
  7. 还有每个人的对python语言的了解 有多有少的
  8. 可能python对于一些列表排序 或者 一些爬虫思路上面
  9. 有更佳优化 有更加简单的代码可以书写
  10. 但是我还是愿意 用最基础的方式 这个可能导致有些代码的多余
  11. 但是整体阅读起来的通顺性比较良好
  12. =====================================================
  13. 写这个脚本 其实 我花了比之前的题目更佳多的时间
  14. 也足够表明 自己在前端知识领域 和 python的基础知识的薄弱

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/59777?site
推荐阅读
  

闽ICP备14008679号