前言
整体上为什么需要防止抓录呢?总会存在虽然是测试阶段,但是仍需要直接配置外网访问的情况,这时候一旦配置了外网地址,就容易被收录,一旦收录了就会直接暴露到搜索引擎上,这是不符合流程要求的,那怎么办呢?当然是robots.txt 来个君子协定解决。
一、robots.txt是什么?
属于一个给爬虫看的希望清单,希望爬虫不要怎么去做(实际上如果别人无视,你也是没得办法,但是正常搜索引擎是有底线的,也是大多数人最常用的搜索方式)
整体结构如下
整体上存在下列属性:
User-agent:代理引擎的名称
Disallow:不希望被访问的url 或 路径
Allow:可以被访问的url 或 路径
# 示例为拒绝所有爬虫的愿望清单配置
User-Agent: * //所有代理引擎
Disallow: / //根目录下的任意不要收录
# 多目录配置
User-Agent: Baiduspider //百度代理引擎
Disallow: /secret
Disallow: /mylove
# 多个配置
User-Agent: Baiduspider //百度代理引擎
Disallow: /
User-Agent: Googlebot //谷歌代理引擎
Allow: /
二、使用步骤
1.引擎对应名称
基本常用的引擎爬虫如下
引擎名称 | 引擎代码 |
---|---|
百度 | Baiduspider |
有道 | YodaoBot |
腾讯SOSO | Sosospider |
搜狗 | sogou spider |
谷歌 | Googlebot |
必应 | Bingbot |
雅虎 | Slurp |
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.配置内容
通常是Deny All,针对需要的Allow即可的方式配置
允许的地址归置上方,Deny All放置下方,与nginx配置一致
User-agent: Baiduspider
Allow: /application/
User-Agent: * //所有代理引擎
Disallow: / //根目录下的任意不要收录
3.配置方法
总体配置是基于域名下能访问到
robots.txt
例如知乎专栏: https://zhuanlan.zhihu.com/robots.txt.
我们也可以参照各大网站的配置去配置
nginx配置
# 懒狗防爬虫方法
location =/robots.txt {
default_type text/html;
add_header Content-Type "text/plain; charset=UTF-8";
return 200 "User-Agent: *\nDisallow: /";
}
#通常方法
# 存放地址 /var/www/html/robots.txt
location =/robots.txt {
robot /var/www/html/robots.txt;
}
网页配置
指令名称 | 指令说明 |
---|---|
noindex | 不在搜索结果中显示该网页。否则该网页可能会编入索引并显示在搜索结果中。 |
nofollow | 不追踪该网页上的链接。否则使用该网页上的链接来发现链接到的网页 |
noarchive | 不在搜索结果中显示缓存链接,否则可通过搜索结果缓存访问 |
nosnippet | 不在搜索结果中显示该网页的文本摘要或视频预览 |
<meta name="robots" content="noindex,nofollow,nosnippet" />
三、校验生效
若没有被搜索引擎搜录的话通常生效时间需要12小时即可,若已经被收录通常需要48小时左右才能生效
1、校验方式
通过百度的资源平台校验:https://ziyuan.baidu.com/robots/index
通过google的资源平台校验:https://www.google.com/webmasters/tools/robots-testing-tool