【爬虫】P1 对目标网站的背景调研(robot.txt,advanced_search,builtwith,whois)
对目标网站的背景调研
- 检查 robot.txt
- 估算网站大小
- 识别网站所用技术
- 寻找网站的所有者
检查 robot.txt
- 目的: 大多数的网站都会包含 robot.txt 文件。该文件用于指出使用爬虫爬取网站时有哪些限制。而我们通过读 robot.txt 文件,亦可以最小化爬虫被封禁的可能。
- 方法: 通过在网站地址后面添加 “/robots.txt”,形成完整的网址,获取该网站对于爬虫的限制信息;
- 案例:
例如:我们想要知道 https://www.csdn.net 即 CSDN 官网的爬虫爬取网站的限制,我们可以通过在网址后添加 “/robots.txt”,形成完整网址:https://www.csdn.net/robots.txt,Enter 访问,看到限制信息如下:

在上图中,我们发现主要包含两个属性:Disallow以及User-agent;- 其中,
"User-agent: *"表示以下所有限制Disallow适用于所有的网络爬虫。 "Disallow: /scripts"表示不允许任何网络爬虫访问网站上的/scripts目录及其下的内容。这意味着爬虫不应该抓取和索引这个目录中的任何内容。
- 其中,
而在访问 baidu 的 robots.txt 文件时,会发现限制不同:

我们提取出第一段解释一下限制信息:
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
这段 robots.txt 文件中的内容针对百度搜索引擎的爬虫(Baiduspider)定义了一系列规则,指示哪些页面或目录不应该被该搜索引擎的爬虫访问和抓取。这些规则的含义如下:
User-agent: Baiduspider:这条规则定义了适用于百度搜索引擎爬虫(Baiduspider)的规则。Disallow: /baidu:这表示不允许百度爬虫访问网站上的 /baidu 目录及其下的内容。Disallow: /s?:这表示不允许百度爬虫访问类似于 /s? 这样的路径,通常这种路径会包含查询参数。Disallow: /ulink?和Disallow: /link?:这表示不允许百度爬虫访问以 /ulink? 或 /link? 开头的路径,同样是限制查询参数的访问。Disallow: /home/news/data/:这表示不允许百度爬虫访问 /home/news/data/ 目录下的内容。Disallow: /bh:这表示不允许百度爬虫访问 /bh 这个路径。
充分了解如何检查网站爬虫限制后,我们下一步
估算网站大小
-
目的: 对于目标网站大小的估算,会影响我们判断是否采用串行下载还是分布式下载。对于只有数百个 URL 的网站,效率没有那么重要,只需要串行下载即可,但是对于数百万个网页的网站,则需要我们使用分布式下载;
-
方法: 而判断采用串行下载还是分布式下载的第一步,则是对网站的大小做好估算。通过访问 Google 高级搜索网站:https://www.google.com/advanced_search

通过 “高级搜索” 搜索关键字段,如上图下图所示,关于 “理财” 字段全网共有 82,200,000 条结果,即 82,200,000 个网页;

所以根据结果,我们对于 “理财” 信息的爬取,必须通过分布式下载,而非串行下载,因为网站页数数量过大。但是如果我们任务比较紧急,我们只需要获取 baidu 上所有关于 “理财” 字段的网页信息,我们在上述的高级搜索中添加条件即可:
site:www.baidu.com,如下图所示:
如此筛选,我们发现只有 69,000 条结果,而非上千万条,此时,我们所需时间将大大减少。
识别网站所用技术
-
目的: 网站使用的不同技术,不同框架构建,会对我们如何爬取网站数据有影响。例如,Webpy 框架相对而言比较容易抓取;但是如果改用 AngularJS 构建网站,此时网站内容为动态加载,爬取难度上升;而如果网站使用 ASP.NET 技术,当我们爬取网站时,就必须使用到会话管理和表单提交了。而这些技术与如何爬取的不同方法,将在后续中逐渐阐述出,本节目标为如何得知网址到底使用了什么技术。
-
方法: builtwith 可以检查网站构建的技术类型;
pip install builtwithimport builtwith builtwith.parse("www.baidu.com")但是近些年对于爬虫的限制,导致
builtwith.parse()函数在很多网站不可用,平替的暂时最好方法,是通过网站:https://www.wappalyzer.com/ 进行查看,但是好像需要付费。
寻找网站的所有者
-
目的: 当然,如何需要找到网站的所有者并与之联系,我们可以通过使用 WHOIS 协议查询域名的注册者是谁。
-
方法: python 有针对协议的封装库,具体方案为我们首先:
pip install python-whoisimport whois print(whois.whois('www.csdn.net'))结果为:

-
domain_name:列出了域名的主要名称和规范名称,这两者在大小写上略有不同,但指向同一个域名。在这里,主要名称是 “CSDN.NET”,规范名称是 “csdn.net”。
-
registrar:这是域名的注册商或注册服务提供商,即负责管理域名注册的公司。在这里,注册商是 “Alibaba Cloud Computing (Beijing) Co., Ltd.”,这是阿里云计算有限公司。
-
whois_server:这是用于查询域名信息的 WHOIS 服务器。在这里,WHOIS 服务器是 “grs-whois.hichina.com”。
-
updated_date:这是域名信息的最近更新日期。在这里,最近更新的日期是 “2023-01-03 02:19:20”。
-
creation_date:这是域名创建的日期。在这里,域名创建的日期是 “1999-03-11 05:00:00”。
-
expiration_date:这是域名的到期日期。在这里,域名到期的日期是 “2024-03-11 04:00:00”。
-
name_servers:这列出了域名使用的名称服务器(DNS 服务器),它们负责将域名解析为 IP 地址。在这里,有两个名称服务器:“VIP3.ALIDNS.COM” 和 “VIP4.ALIDNS.COM”。
-
status:这个字段列出了域名的状态信息,使用了ICANN定义的状态代码。在这里,状态是 “clientTransferProhibited” 和 “clientUpdateProhibited”,表示在域名的传输和更新方面受到限制。
-
emails:列出了用于与域名注册信息相关问题联系的电子邮件地址。在这里,联系邮箱是 “DomainAbuse@service.aliyun.com”,这是阿里云的服务邮箱。
-
dnssec:这是指定域名是否启用了 DNSSEC(域名系统安全扩展)。在这里,域名的 DNSSEC 设置是 “unsigned”,即未启用。
-
state:这个字段提供了域名注册人所在的州或地区。在这里,注册人所在地是 “bei jing”,即北京。
-
country:这个字段提供了注册人所在的国家/地区。在这里,注册人所在国家是 “CN”,即中国。
这些信息提供了关于域名注册和管理的详细信息,包括注册商、注册人所在地、到期日期等等。
上述内容即关于网站的背景调研方法;
相关文章:
【爬虫】P1 对目标网站的背景调研(robot.txt,advanced_search,builtwith,whois)
对目标网站的背景调研 检查 robot.txt估算网站大小识别网站所用技术寻找网站的所有者 检查 robot.txt 目的: 大多数的网站都会包含 robot.txt 文件。该文件用于指出使用爬虫爬取网站时有哪些限制。而我们通过读 robot.txt 文件,亦可以最小化爬虫被封禁的…...
maven如何建立JavaWeb项目并连接数据库,验证登录
这里是建立建立web项目:Maven如何创建Java web项目(纯干货版)!!!_明天更新的博客-CSDN博客 我们主要演示如何连接数据库验证登录。 1.在webapp目录下创建我们的登录页面:index.jsp 还需要再…...
CVPR 2023 | 用户可控的条件图像到视频生成方法(基于Diffusion)
注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。 本次介绍的论…...
动态规划(基础)
一,背包问题 老规矩,上链接(http://t.csdn.cn/hEwvu) (1)01背包问题 给定一个承重量为C的背包,n个重量分别为w1,w2,...,wn的物品,物品i放入背包能产生pi(>0)的价值(i1,…...
【Pytorch:nn.Embedding】简介以及使用方法:用于生成固定数量的具有指定维度的嵌入向量embedding vector
文章目录 1、nn.Embedding2、使用场景 1、nn.Embedding 首先我们讲解一下关于嵌入向量embedding vector的概念 1)在自然语言处理NLP领域,是将单词、短语或其他文本单位映射到一个固定长度的实数向量空间中。嵌入向量具有较低的维度,通常在几…...
动态库的命名规则
1、动态库的命名规则:libname.so.x.y.z 名字含义lib这是共享库的前缀name共享库名字x主版本号y次版本号z发布版本号 2、每个版本号的含义 版本号含义主版本号表示库的重大升级,不同主版本号的库之间是不兼容的。依赖旧的主版本号的程序需要改动相应的…...
【Linux】网络---->网络理论
网络理论 网络协议分层模型网络数据的封装于分用地址管理 网络协议分层模型 OSI五层模型:应用层,传输层,网络层,数据链路层,物理层 应用层:主要负责应用程序间的沟通,代表协议有HTML协议&#x…...
Android学习之路(4) UI控件之输入框
本节引言: 在本节中,我们来学习第二个很常用的控件EditText(输入框); 和TextView非常类似,最大的区别是:EditText可以接受用户输入! 1.设置默认提示文本 如下图,相信你对于这种用户登录的界面并…...
1.初识Web
文章目录 1. 什么是Web?2.初始Web前端2.1.Web标准 1. 什么是Web? web:全球广域网,也称万维网(www World Wide Web),能够通过浏览器访问的网站。 2.初始Web前端 网页有哪些部分组成? 文字、图片、音频、视频、超链接… 我们看到的网页&am…...
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)
微服务技术一 技术栈图一、注册中心Eureka概念:搭建EurekaServer服务注册服务发现(消费者对提供者的远程调用) 二、Ribbon负载均衡负载均衡的原理:LoadBalanced负载均衡的策略:IRule懒加载 三、Nacos注册中心Nacos的安…...
【Linux】可重入函数 volatile关键字 以及SIGCHLD信号
可重入函数 volatile关键字 以及SIGCHLD信号 一、可重入函数1、引入2、可重入函数的判断 二、volatile关键字1、引入2、关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 1、引入 我们来先看一个例子来帮助我们理解什么是可重入函数: 假设我们现在要对…...
【动态规划】回文串问题
文章目录 动态规划(回文串问题)1. 回文子串2. 最长回文子串3. 回文串分割 IV4. 分割回文串 ||5. 最长回文子序列6. 让字符串成为回文串的最小插入次数 动态规划(回文串问题) 1. 回文子串 题目链接 状态表示 f[i][j]表示 i 到 j …...
Laravel Swift Mail发送带附件的邮件报错 “Swift_IoException The path cannot be empty“处理
先说下情况,就是我要做一个发送附件的邮件发送功能,结果,报错:The path cannot be empty。给我整的有点迷糊,网上也没有类似的问题。后来,我检查了一下代码,发现有个地方,是需要给附…...
Linux下常见的代理服务器软件介绍
在Linux系统中,代理服务器是我们搭建网络环境和处理网络请求的常用工具。但是,你知道Linux下常见的代理服务器软件有哪些吗?本文将为你带来对几款常见的Linux代理服务器软件的介绍,帮助你选择适合的代理服务器。 一、Squid&#…...
SCSS的基本用法
1、声明变量 $ 声明变量的符号 $ 下面这张图左半部分是scss的语法,右半部分是编译后的css。(整篇文章皆是如此) 2、默认变量 !default sass 的默认变量仅需要在值后面加上 !default 即可。 如果分配给变量的值后面添加了 !default 标志…...
alertmanager创建nginx-ingress basic auth鉴权
步骤 生成密码 printf "admin:$(openssl passwd -crypt xxxxxx)\n" >> auth 创建新的 Kubernetes 密钥 kubectl create secret generic basic-auth --from-file auth -n victoria-metrics 修改 ingress 以使用 secret 中的凭证来实现基本身份验证 编辑 P…...
系列六、Redis中的五大数据类型及相关操作
一、五大数据类型 String类型、List类型、Set类型、ZSet类型、hash类型。 二、String类型 2.1、内存储存模型 2.2、常用操作命令 三、List类型 3.1、概述 list列表,相当于Java中的list集合。特点:元素有序 且 可以重复。 3.2、内存存储模型 3.3、常用…...
四大运营商的大流量卡测评,看完您会选哪个运营商?
很多朋友都说网上的流量卡资费是真的便宜,但是小编认为资费便宜归便宜,但是运营商的小心思也有不少。 今天小编就带大家看一看三大运营商推出的正规流量卡都有哪些小心思? 首先,移动推出的线上大流量卡数量是最少的ÿ…...
Apache-Maven
安装Maven 解压apache-maven到目录下 Maven目录如下 bin:目录中存放的是可执行文件,JAVA项目中的编译执行打包都要使用bin. conf:存放的是Maven的配置文件,本地配置、私服配置都需要在conf下的settings.xml进行配置。 lib下存放的是Maven所…...
什么是原子交换?
安全地在各个区块链网络之间传输资产对于释放被困流动性并吸引更多用户进入这一领域至关重要,同时也保持 Web3 的信任最小化核心价值。原子交换是一种让两个人在不依赖于中介来促成交易的情况下,在不同的区块链网络之间交换通证资产的方式。这为 DeFi 用…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
C#最佳实践:为何优先使用as或is而非强制转换
C#最佳实践:为何优先使用as或is而非强制转换 在 C# 的编程世界里,类型转换是我们经常会遇到的操作。就像在现实生活中,我们可能需要把不同形状的物品重新整理归类一样,在代码里,我们也常常需要将一个数据类型转换为另…...
