1.通过Referer判断
//Referer: https://hotel.lixiuyang.com.cn/
String referer = request.getHeader("Referer");
String serverName = request.getServerName();
//如果来源站外(爬虫)
if(referer==null||referer.contains(serverName)){
//跳转到异常页面
return ;
}
2.cookie分段机制
cookie: uuid_tt_dd=10_37460584560-1654044205095-234198; __gads=ID=e1df21c95845aaac-22ab55b59ed300cc:T=1654044206:RT=1654044206:S=ALNI_MYZZoNoRN7RqkSdd_ApFDqeBKIzvQ; c_dl_um=-; ssxmod_itna=mqIxRiDQuIGHD8D2BmDkDcDTDCbRqGkjYCQBfDBT4uxiNDnD8x7YDvCmhlQTQ0Se3P0bjY7oP5dib=o2iqNpF2xGLDmKDytW2+qDxOq0rD74irDDxD39D7PGmDinMXD7x6kgnrdKiODQ4GyDitDKLN/DG3D046dD46BU80/3eDSYYtomD=DjqGgDBdQ4=xnDDtro=hM+du=xYpWed0DxBQD7q2yRfiDCO6lIMd7=hoqG0h5t2xQFhDoB7G=t3O4Ki+1K2q3t+DQ07D267DfzG+eDD3q4rg3eD===; ssxmod_itna2=mqIxRiDQuIGHD8D2BmDkDcDTDCbRqGkjYCQBD8qpDuDGX6xGaKmmOsx82it5TF4KHMSooxidqgpde0iq6pu+TpZGiZ7t4Y1pZfmvOkz2p6wGM9w5Sj9YyKLjuNHUp1rUOgOiYlyBhGDAWMKYKQ5yb4rliY6uWnQGb02kmY=+BYEsROKwbYxWD7jox7=DedxxD===; UserName=riju4713; UserInfo=1b5a1875303b4bbcbdc4a807b44e2a50; UserToken=1b5a1875303b4bbcbdc4a807b44e2a50; UserNick=%E6%85%95%E5%AE%B9%E6%BD%87%E6%B9%98; AU=731; UN=riju4713; BT=1654080143528; p_uid=U010000; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%2C%22uid_%22%3A%7B%22value%22%3A%22riju4713%22%2C%22scope%22%3A1%7D%7D; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_37460584560-1654044205095-234198!5744*1*riju4713; c_dl_fref=https://www.baidu.com/link; c_dl_prid=1654610936080_499818; c_dl_rid=1654611016893_553154; c_dl_fpage=/download/qq_43815828/12058042; c_first_ref=www.baidu.com; c_segment=6; dc_sid=93b40de07f67e56450c450049ca03af3; firstDie=1; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1656424592,1656458343,1656506734,1656758805; __gpi=UID=00000614e0944989:T=1654044206:RT=1656759136:S=ALNI_MZ7770okwGMK3LktmjO1zbV6Iu6ng; c_first_page=https%3A//blog.csdn.net/weixin_44141495/article/details/108734445; dc_session_id=10_1656763419312.679744; c_dsid=11_1656763418114.230266; log_Id_click=236; log_Id_view=908; c_pref=https%3A//blog.csdn.net/riju4713%3Ftype%3Dblog; c_ref=https%3A//blog.csdn.net/weixin_44141495/article/details/108734445; c_page_id=default; dc_tos=ree71x; log_Id_pv=283; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1656763701
备注:1.增加分段cookie,增加爬虫难度
2.通过增加多key,服务器端校验key-value真伪
3.数据加密
3.1后端数据加密,前端收到数据在解密
escape
base64
也可以用加密后的数据再次请求接口获取解密数据
3.2.自定义算法
自定义算法+前端解密
4.ip频率(频繁抓取IP被封)
4.1.设置每个页面抓取时间间隔,降低被封概率
4.2.设置随机时间
使用redis缓存:
key:ip
value:请求次数
extiretime:60(秒)
判断一分钟请求超过100次,就把这个ip加入黑名单,不让访问
数据采集层
HttpClient,HTML Cleaner,Xpath,正则表达式
数据存储层
HBase,Redis
数据处理层
solr/es
数据展示层
springboot
freemarker
HighChart
爬虫项目:多台服务器
网站爬虫类URL定时项目:一台服务器
HBase数据库:集群
Solr服务器:集群
Redis服务器:集群
爬虫监控项目: 一台服务器
web项目:多台服务器
zk:集群
网站采取反爬策略
模板定期变动
URL抓取失败
频繁抓取IP被封
不同配置文件配置不同网站的模板规则
数据库存储不同网站的模板规则
经常更新网站标签
网站模板定期变动-解决方案
不同配置文件配置不同网站的模板规则
数据库存储不同网站的模板规则
网站url抓取失败
httpClient默认处理方式
Storm实时解析日志,将失败url重新加入抓取仓库,一般超过3次就放弃