趣发现是一个很好玩的网页,因为它选择了一直用手机QQ浏览器。最近想做一个爬虫,就想那它练练。

第一步:获取动态图片的链接

趣发现首页:http://fun.html5.qq.com/?ch=01201&g=3

用chrome打开首页链接以后,按F12,再次刷新页面,分析NetWork中的链接。可以依次筛选不同的类型,进行过滤。

在XHR标签中,注意到有四条链接很有规律,如图所示:

点击链接,查看其信息,得到对应的Request URL:

进一步的,在浏览器中,打开此链接:

(我的浏览器中,安装的有解析json的插件———JSON—handle,所以页面显示的是格式化后的效果)

从这个页面中,可以找到显示出来的图片链接等,可以判定是我们所需的页面素材。

那么XHR标签中,同时四个页面是怎么回事???看不懂,咱就多试试。

一直拉下网页的拉条,使页面加载更多的动态图,则XHR标签中,连接越来越多,也会发现一个很规律的事情:

猜测关键信息:

从这些链接中,可以提取一些有用的信息:

ist_2?    //固定不变

key  = 1 //只有第一行

2 //只有第二行

4 //除了第一、第二、最后一行  后的全部

5 //只有最后一行

limit=  8 //四个数值都有分布,且没有特别少的,从而推测四种取值差不多

9

10

11

rt  =    1  //只有第一行,第二行,第三行,最后一行

//或者   key!=4,则rt=1 ,且 第一个key==4,则rt=1

2  //tr!=1 ,则rt=2

_t=???  //完全没规律,只知道它们前五位相同,接着的一位,相差在两个数之间。

这里,还可以获取到的另一个有用信息是,这个链接中的特殊字符串:limit、rt、_t  等。

一个完整的请求动态图片资源的链接是:http://fun.html5.qq.com/api/list_2?key=4&limit=9&rt=2&_t=1474946575006&ch=01201

我们照着这个资源链接构造需要的模板:http://fun.html5.qq.com/api/list_2?key=【】&limit=【】&rt=【】&_t=【】&ch=01201    // 【】 代表需要填参数

第二步:查找 图片的链接 的出处

由第一步,我们找到了发往服务器获取图片的链接,现在需要分析这些链接是从哪里构建的或者是怎么构建的,以便我们自己也可以批量构建这样的链接。

接着查看Network下,其他标签有没有比较有价值的信息:就比如JS标签下,仅仅有六个文件,那么就可以那他们来分析。

打开这几个文件,里面好多、好长,干脆偷点懒,直接把刚才得到的链接中的特殊字符串:limit、rt、_t  往里代,直接搜索这些文件中有没有这些字符串。

时间+耐心+不放弃==一点蛛丝马迹!!!

关键JS文件 1、

在 http : //res.imtt.qq.com/video_fun/dist/index-d573bf9b4f.js 文件中:

fetchCore : function (e)函数里面有一段关键的代码,出现了关键字:limit,而附近的关键字“/api/list_2” “key” “rt”等,也印证了这段代码是请求资源文件的关键:

fetchCore : function (e) {try {var t = this.props.groupInfo,n = t.fetchType,a = t.fetchKey,r = t.pageSize;$fn.triggerReactEvent(Enum.ReactEventName.VIDEO_SECTION_PLAY, {currentTargetScope : null}),$fn.triggerReactEvent(Enum.ReactEventName.GIF_SECTION_REQUIRE_STOP, {exceptTarget : null}),this.state.groupItemData && (e && e.refresh ? $fn.reportOptNgx("LIST_REFRESH") : $fn.reportOptNgx("LIST_SCROLL_MORE"));var c = parseInt(Math.random() * (r - 8) + 8, 10);return n === Enum.GroupPageFetchType.RECOM ? $fn.ajax("/api/recom", {limit : c,rt : e && e.refresh === !0 ? Enum.GroupPageRefreshType.REFRESH : Enum.GroupPageRefreshType.SCROLLMORE}) : $fn.ajax("/api/list_2", {key : a,limit : c,rt : e && e.refresh === !0 ? Enum.GroupPageRefreshType.REFRESH : Enum.GroupPageRefreshType.SCROLLMORE})} catch (i) {$fn.jsRuntimeError(i, "bc0e4d47a48d600e1f14c366174ebfe2")}},

代码前后文断掉的太多,就是查找函数之间的各个调用关系,也可能会出现漏掉的现象。我们需求的不是那么精细,就可以根据第一步中得到的一些结果,跟这里的代码经行匹配:

进一步猜测关键信息:

1、

从函数中:var c = parseInt(Math.random() * (r - 8) + 8, 10);

limit : c,

两行,加上第一步的推测(limit=8、9、10、11  而且都有不少的分步),

可以得知::limit就是一个随机数,取值在【8-11】之间。

2、

函数中: key : a,

rt : e && e.refresh === !0 ? Enum.GroupPageRefreshType.REFRESH : Enum.GroupPageRefreshType.SCROLLMORE

看不懂什么意思,就直接用一步推测的值:

key=4     //在多次下拉 趣发现首页面 的下拉条,查看XHR标签的时候,新出现的链接中,这两个参数一直没变

rt=2

3、 还有一个很关键的参数: “_t=     "   在这里没出现,而且明知道  $fn.ajax() 是一个函数调用,但是找不到它在哪里。

那么就找找这几个js文件中,有没有 "_t" 这个关键字的出现。

当然,试一试还是有的:

关键JS文件 2、

在  http : //res.imtt.qq.com/video_fun/res/js/plugin-ffd048441a.js 文件中,出现了“_t”这个关键字,而且它后面还加一个很重要的函数:a(r.report + u[2] + "&_t=" + +new Date

u = function () {if (r.report) {for (; e.length; ) {for (var t = !1, n = e.shift(), u = s(n, c.length), h = 0, f = r.ignore; f > h; h++) {var p = r.ignore[h];if (o(p, "RegExp") && p.test(u[1]) || o(p, "Function") && p(n, u[1])) {t = !0;break}}t || (r.combo ? c.push(u[0]) : a(r.report + u[2] + "&_t=" + +new Date))}if (r.combo) {if (l)return;l = !0,i = setTimeout(function () {var t = c.length;a(r.report + c.join("&") + "&count=" + t + "&_t=" + +new Date),c = [],l = !1}, r.delay)}}}

在JS代码中,+new Date() 是以毫秒数的格式返回当前时间,(不知道这一点,多次与它擦肩而过,看过了也就过了 )

在第一步中,得知 _t 的值一直在变化,且前几位相同,和这个 +new Date()的效果是一样的,所以可以猜测就是这一段代码了。

第三步:填充 模板链接

由第二步中两个关键JS文件中分析的参数,加上第一步构建的模板链接:http://fun.html5.qq.com/api/list_2?key=【】&limit=【】&rt=【】&_t=【】&ch=01201    // 【】 代表需要填参数

我们就可以往其中赋值了:http://fun.html5.qq.com/api/list_2?key=【4】&limit=【8或9或10或11】&rt=【2】&_t=【以毫秒格式显示的当前时间】&ch=01201    // 【】 中的参数为可能填的值

最后,随便测一个链接:http://fun.html5.qq.com/api/list_2?key=4&limit=8&rt=1&_t=1474952332148&ch=01201  就出现json格式的响应资源文件。解析这个文件就可以得到想要的动态图片链接。

(注意:单独打开测试链接是没有用的,其中原因可能是,页面使用了cookie机制。  测试的方法是,首先打开趣发现的首页,再在同一个开着的浏览器中,输入测试链接地址)

总结: 查找整个代码,耗费了好长时间。最开始的时候,也是想着去分析那个连接在哪里构建的,走了一些弯路,才慢慢的采取这样的分解关键词,并在源码中搜索办法。整个过程,大多是猜测进行下去的,因为不是要求很严密的逻辑,所以就猜着猜着,离想要的越来越近。



趣发现 资源页面请求链接分析相关推荐

  1. QT实现CSDN上传资源管理助手Demo之(3)请求上传资源页面并解析

    欢迎关注公众号可以查看更多完整文章 QT实现CSDN上传资源管理助手Demo之(3)请求上传资源页面并解析 请求自己上传的资源页面,只需要请求http://download.csdn.net/my/u ...

  2. 关于页面请求发起后,通过F12查看到,被挂起页面中stalled花费很长时间问题的追查...

    2019独角兽企业重金招聘Python工程师标准>>> 请求刚一发出,timing中显示是这样的 有时候过了几十秒之后才响应返回,页面加载完成. 已下内容纯粹是转载,只为做个记录.方 ...

  3. 一个Web页面的问题分析

    一个Web页面的问题分析 几个月之前我接到一个新的开发任务,要在一个旧的Web页面上面增添一些新的功能.在开发的过程中发现旧的代码中有很多常见的不合适的写法,结合这些问题,如何写出更好的,更规范的,更 ...

  4. python爬取所有页url_Python 如何爬取相同url下,多个页面的链接内容

    据说,python是方便抓取网页数据.今天让我们试试.它有多方便的对于python来抓取数据.介绍抓取数据,基本上得到这个网页的源代码通过网页的URL,并过滤出所需的信息根据源代码.准备IDE: py ...

  5. 推荐|45个值得收藏的Python优质资源(附链接)

    热门资源博客 Mybridge AI 比较了18000个关于Python的项目,并从中精选出45个最具竞争力的项目.我们进行了翻译,在此一并送上. 这份清单中包括了各不相同的20个主题,以及一些资深程 ...

  6. 搜索引擎技术 ——链接分析

    文章目录 Web图 链接模型 随机游走模型 子集传播模型 链接分析算法 PageRank算法 链接陷阱 HITS算法 Hub页面和Authority页面 相互增强关系 HITS算法 SALSA算法 确 ...

  7. QAX答题页面js逆向分析(二)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过前端js解密,获取答案 二.通过Python,模拟请求完成自登录到答题的所有操作. 1.引入库 2. 程序结构 ...

  8. 前嗅ForeSpider教程:采集图片/视频/资源文件的链接地址

    昨天为大家介绍了如何采集图片/视频/资源文件后,有小伙伴问我如何采集他们的链接地址,今天小编就为大家演示如何采集图片/视频/资源文件的链接地址,操作如下: 第一步:新建任务 ①点击左上角"加 ...

  9. [转]HTTP协议及其请求头分析

    众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用.    WWW 服务器使 ...

最新文章

  1. 毫米波雷达、ADAS中的应用以及毫米波雷达的检测、测距、测速和角度测量
  2. pandas中set_option的常用设置:显示所有行、显示所有列、控制浮点型精度、每个数据元素的显示字符数、对齐形式等
  3. bat批处理删除指定N天前的文件
  4. WORD页边距、行距、页码、页眉页脚
  5. Swift UIlabel 的高级用法,文本显示表情,图片
  6. 数据结构-算法和算法评价
  7. 五子棋c语言开题报告,基于Java语言的五子棋游戏设计开题报告.doc
  8. mfc 调用绿色版的Foxit Reader / 迷你pdf阅读器.exe的同时打开一个pdf文件
  9. 【二】网络空间安全综述
  10. 计算机博士有哪些专业方向,国内计算机专业博士研究方向-20210619140356.docx-原创力文档...
  11. golang打包流程
  12. python编程从入门到实践——16章
  13. html 自动填充缓存,禁止input密码自动填充及浏览器缓存密码账号解决方案
  14. GateWay入门Demo
  15. 蛮力法之百鸡百钱问题
  16. Java编程随机发红包,红包随机算法Java实现
  17. Windows环境下安装RocketMQ,及SpringBoot整合RocketMQ
  18. 让人很容易误解的TCP拥塞控制算法
  19. C++一些常见的面试题
  20. http请求报文及响应报文

热门文章

  1. 深度学习(从零开始)
  2. [附源码]java毕业设计小区物业管理系统论文
  3. 网络管理利器,通过IP地址查询跟踪网络
  4. ARM | STM32F10xxx课堂学习笔记(时钟 高级控制定时器)...
  5. ABP zero 4.2 发布
  6. PHP初级【10天小积累-第三天】
  7. 录播系统服务器ip地址,录播系统自动跟踪系统
  8. Python爬取《你好李焕英》豆瓣短评并基于SnowNLP做情感分析
  9. Leetcode1189. “气球” 的最大数量(C++思路与代码)
  10. Java实现填写乘法算式