本系列持续更新中,三连关注不迷路
干货满满不看后悔
个人主页→数据挖掘博主ZTLJQ的主页
个人推荐python学习系列:
☄️爬虫JS逆向系列专栏 - 爬虫逆向教学
☄️python系列专栏 - 从零开始学python
Python爬虫中的hook技术是指在爬取网页时通过钩子函数对请求进行修改或者拦截,从而达到定制化需求的目的。这种技术在爬虫开发中非常重要,它可以让我们更加灵活地控制爬取过程。
Python爬虫中的hook技术主要包括以下几种:
requesthook是在发送请求前对请求进行修改的操作。它通常用于添加请求头、设置代理等操作。例如,我们可以使用requesthook实现对每个请求都添加一个User-Agent头部:
import requests
def add_user_agent(request):
headers = request.headers
headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
return request
requests.get('http://www.baidu.com', hooks={'pre_request': add_user_agent})
responsehook是在接收到响应后对响应进行处理的操作。它通常用于解析网页数据、保存数据等操作。例如,我们可以使用responsehook实现对每个响应都打印出网页内容:
import requests
def print_response(response):
print(response.text)
requests.get('http://www.baidu.com', hooks={'response': print_response})
exceptionhook是在爬虫发生异常时对异常进行处理的操作。它通常用于重试操作、记录日志等操作。例如,我们可以使用exceptionhook实现对每个异常都进行重试:
import requests
def retry(exception):
if isinstance(exception, (requests.ConnectionError, requests.Timeout)):
return True
return False
requests.get('http://www.baidu.com', hooks={'response': retry})
hook技术可以很好的帮助大家在爬虫中找到一些参数和数据
1、当我们遇到 JSON.parse这种加密数据可以直接使用下面的钩子
(function(){
var parse = JSON.parse;
JSON.parse = function(params) {
console.log("Hook -->",params);
debugger;
return parse(params);
}
}
)();
2、当我们遇到 JSON.stringify() 这种方法就可以用到下面这个钩子
(function(){
var stringify = JSON.stringify;
JSON.stringify = function(params) {
console.log("Hook -->",params);
debugger;
return stringify(params);
}
}
)();
3、当我们需要找header的时候,就可以用下面这个代码
var code = function(){
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){
if(key=='Authorization'){
debugger;
}
return org.apply(this,arguments);
}
}
4、当我们需要找url的参数的时候就用下面这个钩子
var code = function(){
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function(method,url,async){
if(url.indexOf("/改参数api")>-1){
debugger;
}
return open.apply(this,arguments);
};
}
5、当我们找cookie参数的时候,可以这样注入钩子
(function (){
'use strict';
var cookieTemp = '';
Object.defineProperty(document,'cookie',{
set: function(val){
if(val,indexOf('要找的参数') != -1){
debugger;
}
console.log('Hook抓取到的cookie->',val);
cookieTemp = val;
return val;
},
get: function(){
return cookieTemp;
},
});
})();
最后希望以上内容能够帮助到大家谢谢!!!