从UserAgent识别搜索引擎并判断真假蜘蛛
🕗 by pyList at 2020-03-06 19:11
一般搜索引擎去爬取一个网站时,首先是去读取网站的robots.txt 文件,看看网站管理员有没有在该文件设置禁止某些蜘蛛,或禁止访问哪些路径。然而一些流氓蜘蛛不会顾及robots.txt 文件,想爬哪就爬哪。这种情况管理员只能通过应用程序去识别判断,是否限制某些访问。
识别搜索引擎
通过UserAgent 字符串来识别,下面例子是使用Go 来实现
简单的是通过正则来识别:
spiderReg = regexp.MustCompile(`(?i)bot|crawl|spider|slurp|sohu-search|lycos|robozilla|google|Baidu`)
上面的正则就能识别大多数搜索引擎,使用方法:
if spiderReg.MatchString(r.Header.Get("User-Agent")) {
// 对搜索引擎作响应
}
如果要想要从UserAgent 里分析出更多的信息,可借助一些库来解析,如下面:
import "github.com/mssola/user_agent"
ua = user_agent.UserAgent{}
ua.Parse("Mozilla/5.0 (compatible; Googlebot/2.1;+http://www.google.com/bot.html)")
fmt.Printf("%v\n", ua.Bot()) // => true
name, version = ua.Browser()
fmt.Printf("%v\n", name) // => Googlebot
fmt.Printf("%v\n", version) // => 2.1
识别真假
UserAgent 字符串可以在 http 请求时设置,任何一个客户端都可以伪造成一个搜索引擎去访问你的网站。可以通过下面两个步骤去识别真正的搜索引擎。
在 *nix
系统下使用 host
命令,使用方法如下面两个示例:
$ host 207.46.13.178
178.13.46.207.in-addr.arpa domain name pointer msnbot-207-46-13-178.search.msn.com.
$ host msnbot-207-46-13-178.search.msn.com
msnbot-207-46-13-178.search.msn.com has address 207.46.13.178
$ host 203.208.60.24
24.60.208.203.in-addr.arpa domain name pointer crawl-203-208-60-24.googlebot.com.
$ host crawl-203-208-60-24.googlebot.com
crawl-203-208-60-24.googlebot.com has address 203.208.60.24
解释一下上面的过程,首先通过来访 IP
作DNS反向查询,得到相关域名,再把得到的域名再做一次查询,得到 IP
,与原来的IP
相同才是比较靠谱的搜索引擎。
Go 语言里的 net
包可以实现这样的查询:
names, err := net.LookupAddr(ip)
addrs, err := net.LookupHost(name)
通过这种方式建立一个IP白名单,就可以屏蔽掉一些来路不明的蜘蛛。
本文网址: https://pylist.com/t/1583493104 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
相关推荐
小工具
标签
python
微信
浏览器
识别
api
搜索引擎
网址
提交
自动
主动
经验
正则
关键字
搜索
robots
mobile
txt
蜘蛛
匹配
朋友圈
好友
分享
openwrt
国内
google
身份验证
authenticator
迁移
手机
格式
转换
常见
时间
xor
解密
加密
方法
u盘
mac
diskutil
格式化
顽固
之坑
files
golang
open
服务
app
store
登录
未知
xmltodict
gbk
xml
编码
usb
上网卡
共享
网络
bbr
路由
开启
sqlite
数据库
提速
固件
debian
ubuntu
编译
系统启动
硬件加速
ubnt
er
最新版
wndr4300
升级
访问速度
vps
加速
failed
load
devtools
sourcemap
chrome
自动更新
microsoft
关闭
静音
风扇
主机
笔记本
改造
低功耗
web
爬虫
服务器
组装
尝鲜
视频
体验
cpu
查看
温度
server
浏览
webdriver
微博
selenium
gnu
linux
安装
宅家
坑记
屏幕
动手
nginx
quic
抢先
最近发表
- Chrome 控制台 DevTools failed to load SourceMap 警告的消除方法
- Mac 关闭 Microsoft 自动更新
- Mac 登录 App Store 出现“发生了未知错误”的解决方法
- 老笔记本改造为无风扇静音主机方案
- 自己组装21瓦低功耗家庭爬虫、文件、web服务器
- 微信视频号尝鲜体验
- Ubuntu/Debian 查看CPU温度的方法
- 在Ubuntu/debian Server 系统使用Chrome 无头浏览模式
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- 使用Golang selenium WebDriver 自动登录微博
- 在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
- Mac 下制作 USB ubuntu/debian 系统启动、安装盘的几种方法
- ubuntu/debian 下自行编译 OpenWRT 固件
- 宅家自己动手换手机屏幕掉坑记
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- 在 Nginx 和 Golang web 上抢先体验 QUIC
最近浏览
- OpenWrt 国内源
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- python 常见的时间格式转换
- 用python 实现XOR 加密解密的方法
- 在终端使用Mac diskutil 命令格式化顽固U盘
- Golang 服务之坑:too many open files
- Mac 登录 App Store 出现“发生了未知错误”的解决方法
- python xmltodict 解析xml gbk 编码问题解决
- Openwrt 使用USB 4G 上网卡共享网络
- Openwrt 路由上开启BBR
- python SQLite 数据库提速经验
- ubuntu/debian 下自行编译 OpenWRT 固件
- Mac 下制作 USB ubuntu/debian 系统启动、安装盘的几种方法
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- WNDR4300 固件升级到 OpenWrt 最新版
- 开启BBR 加速小VPS访问速度