声明

本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负!

前言

随着反爬力度的不断升级,现在的爬虫越来越难搞了。诸如加密参数sign、signature、token。面对这种情况传统的方式可以使用自动化程序,如selenium、pyppeteer等。但是使用自动化工具会有很多特征能够被检测,对于爬虫工程师也很不友好。

正所谓道高一尺魔高一丈,这些难题怎么能难到我们呢?

今天介绍一个工具,ajax-hook。知名见意,对于网页中ajax的hook。 具体怎么hook,可以看一下源码,在这里不再解释。 参考链接:ajax-hook

小试牛刀

简单的了解过这个工具后,怎么使用呢。可以参考一下大佬的文章。 链接:爬虫神器!用它可以实时处理和保存 Ajax 数据

文章的内容在这里我已经测试过了没有问题,感兴趣的小伙伴可以自己去做一遍。

之前有小伙伴问我对于某音的视频评论有什么好的方法,这篇文章就使用ajax-hook去抓取评论数据。

项目地址

Github地址:https://github.com/wendux/Ajax-hook源码:https://unpkg.com/ajax-hook@2.1.3/dist/ajaxhook.min.js

需要使用的源码在这里直接贴出来。

//# sourceMappingURL=ajaxhook.min.js.map

!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){"use strict";function r(t,e){var n={};for(var r in t)n[r]=t[r];return n.target=n.currentTarget=e,n}function o(t,e){function n(e){return function(){var n=this.hasOwnProperty(e+"_")?this[e+"_"]:this.xhr[e],r=(t[e]||{}).getter;return r&&r(n,this)||n}}function o(e){return function(n){var o=this.xhr,i=this,s=t[e];if("on"===e.substring(0,2))i[e+"_"]=n,o[e]=function(s){s=r(s,i),t[e]&&t[e].call(i,o,s)||n.call(i,s)};else{var u=(s||{}).setter;n=u&&u(n,i)||n,this[e+"_"]=n;try{o[e]=n}catch(t){}}}}function i(e){return function(){var n=[].slice.call(arguments);if(t[e]){var r=t[e].call(this,n,this.xhr);if(r)return r}return this.xhr[e].apply(this.xhr,n)}}return e=e||window,e[u]=e[u]||e.XMLHttpRequest,e.XMLHttpRequest=function(){for(var t=new e[u],r=0;r

项目实战

直接开始整吧,某音视频链接:aHR0cHM6Ly91bnBrZy5jb20vYWpheC1ob29rQDIuMS4zL2Rpc3QvYWpheGhvb2subWluLmpz

抓取的主要是评论内容和ip的归属地。

我这里使用的是油猴脚本注入。 在这里插入图片描述

ctrl+s后,重新刷新页面,发现扩展的油猴图标上面有一个红色的1,此时就说明该脚本已经成功注入到该网页了。

打开F12面板,向下翻动页面就可以看到console中源源不断的输出了内容,

认真比对一下发现想要的都在这里。

到这里项目就已经完成了1/3,现在的问题是怎么持久化本地去。

js中有很多可以发送网络请求的库,在这里推荐使用axios,像ajax-hook一样直接集成到油猴脚本里,然后在本地使用flask搭建一个web服务就可以源源不断的获取数据了。

脚本最终的代码:

本地web服务:

到这里就基本完成了,如何一直获取内容。可以使用自动化工具不断的向下滑动得到,或者内容不多也可以手滑。

我这里使用的是手滑,不过是用js自动滑动,这样更方便。 上网找了一段代码可以实现这个效果。

(function () {

var height = document.body.clientHeight;

var number = 0; //控制结束累加器

var length = 0; //控制每次翻滚长度

var frequency = 10000; //控制总时间

var time = setInterval(function(){

number += 1;

if(number == frequency + 1){

clearInterval(time);

} else {

//length += height /frequency ;

length += height /50 ;

document.documentElement.scrollTop = length;

}

},100); //每隔100MS翻滚一次

})()

方法同上。

最终看一下能不能实现自动滑动抓取内容的效果吧。

如果本文对你有帮助的话剋点赞收藏一波!

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: