【爬虫】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 builtwith
    
    import builtwith
    builtwith.parse("www.baidu.com")
    

    但是近些年对于爬虫的限制,导致 builtwith.parse() 函数在很多网站不可用,平替的暂时最好方法,是通过网站:https://www.wappalyzer.com/ 进行查看,但是好像需要付费。


寻找网站的所有者

  • 目的: 当然,如何需要找到网站的所有者并与之联系,我们可以通过使用 WHOIS 协议查询域名的注册者是谁。

  • 方法: python 有针对协议的封装库,具体方案为我们首先:

    pip install python-whois
    
    import 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”,即中国。

这些信息提供了关于域名注册和管理的详细信息,包括注册商、注册人所在地、到期日期等等。


上述内容即关于网站的背景调研方法;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中实现文字检索时候将搜索内容标红

实现结果 html&#xff1a; <div class"searchBox"><span class"bt">标&#8195&#8195题</span><div class"search"><div class"shuru"><!-- <span class"title">生产经营<…

如何批量修改图片名为不同名称

如何批量修改图片名为不同名称&#xff1f;当今社会&#xff0c;因为人们都养成了随手拍照的习惯&#xff0c;所以拥有上千上万张照片的相册已经司空见惯不足为奇。然而&#xff0c;我们在保存这些照片时往往都会碰到一个大难题——电脑中的图片名称千奇百怪&#xff0c;让整个…

完美解决微信小程序使用复选框van-checkbox无法选中

由于小程序使用了vant-ui框架&#xff0c;导致checkbox点击无法选中问题 <van-checkbox value"{{ checked }}" shape"square"><view class"check-content"><view class"checktext">我已阅读并同意>《用户协议》…

opencv-目标追踪

import argparse import time import cv2 import numpy as np# 配置参数 ap argparse.ArgumentParser() ap.add_argument("-v", "--video", typestr,help"path to input video file") ap.add_argument("-t", "--tracker", …

第1天----验证一个字符串是否是另一个字符串的子串

本文我们将学习如何去验证一个字符串是否是另一个字符串的子串。 一、小试牛刀&#xff1a; 题目描述 输入两个字符串&#xff0c;验证其中一个串是否为另一个串的子串。 输入格式 两行&#xff0c;每行一个字符串。 输出格式 若第一个串 s 1 是第二个串 s 2 的子串&#xff0c…

java Spring Boot properties多环境配置拆分文件管理

上文 java Spring Boot yml多环境拆分文件管理优化 我们用yml 做了一个多环境配置文件的拆分管理 我们将 application.yml 改为 application.properties 参考代码如下 spring.profiles.activedev我们知道 yml 是用 : 来区分高低基本 而 properties是直接通过 . 来表达 其他基本…

SpringCloud实用篇7——深入elasticsearch

目录 1 数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法1.2.5.小结 1.3 RestAPI实现聚合1.3.1 API语法1.3.2 业务需求1.3.3 业务实现 2 自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 实现…

POJ 1995 Raising Modulo Numbers 快速幂

一、总结 我一开始担心溢出&#xff0c;开了一个无符号的long long&#xff0c;但是直接超时&#xff0c;后来一看它的mod不是很大&#xff0c;于是改成int&#xff0c;直接过了。 二、代码 #include <iostream> using namespace std; int H, Z; int M; int mulMod(in…

Python基础教程:私有变量的访问和赋值教程

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 首先我们这里先描述下&#xff1a; Python中&#xff0c;变量名类似__x__的&#xff0c;以双下划线开头&#xff0c;并且以双下划线结尾的&#xff0c;是特殊变量&#xff0c;特殊变量是可以直接访问的&#xff08;比如 doc, __i…

SpringBoot3集成ElasticSearch

标签&#xff1a;ElasticSearch8.Kibana8&#xff1b; 一、简介 Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎&#xff0c;适用于各种数据类型&#xff0c;数字、文本、地理位置、结构化数据、非结构化数据&#xff1b; 在实际的工作中&#xff0c;历经过Ela…

QT的设计器介绍

设计器介绍 Qt制作 UI 界面&#xff0c;一般可以通过UI制作工具QtDesigner和纯代码编写两种方式来实现。纯代码实现暂时在这里不阐述了在后续布局章节详细说明&#xff0c;QtDesigner已经继承到开发环境中&#xff0c;在工程中直接双击ui文件就可以直接在QtDesigner设计器中打…

【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互

目录 专栏导读 6 图形绘制与动画效果 6.1 绘制基本图形、文本和图片 6.2 实现动画效果和过渡效果 7 数据可视化 7.1 使用 Matplotlib绘制图表 7.2 使用PyQtGraph绘制图表 7.3 数据的实时刷新和交互操作 7.3.1 数据的实时刷新 7.3.2 交互操作 7.4 自定义数据可视化…

【WPF】 本地化的最佳做法

【WPF】 本地化的最佳做法 资源文件英文资源文件 en-US.xaml中文资源文件 zh-CN.xaml 资源使用App.xaml主界面布局cs代码 App.config辅助类语言切换操作类资源 binding 解析类 实现效果 应用程序本地化有很多种方式&#xff0c;选择合适的才是最好的。这里只讨论一种方式&#…

Unity制作一个简单的登入注册页面

1.创建Canvas组件 首先我们创建一个Canvas画布&#xff0c;我们再在Canvas画布底下创建一个空物体&#xff0c;取名为Resgister。把空物体的锚点设置为全屏撑开。 2.我们在Resgister空物体底下创建一个Image组件&#xff0c;改名为bg。我们也把它 的锚点设置为全屏撑开状态。接…

【深入理解ES6】字符串和正则表达式

概念 字符串&#xff08;String&#xff09;是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol&#xff08;es6新增&#xff09;。 更好的Unicode支持 1. UTF-16码位 字符串里的字符有两种&#xff1a; 前 个码位均以16位的编码单元…

总结,由于顺丰的问题,产生了电脑近期一个月死机问题集锦

由于我搬家&#xff0c;我妈搞顺丰发回家&#xff0c;但是没有检查有没有坏&#xff0c;并且我自己由于不可抗力因素&#xff0c;超过了索赔时间&#xff0c;反馈给顺丰客服&#xff0c;说超过了造成了无法索赔的情况&#xff0c;现在总结发生了损坏配件有几件&#xff0c;显卡…

文心一言最新重磅发布!

8月16日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023举办。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰以《大语言模型为通用人工智能带来曙光》为题&#xff0c;阐述了大语言模型具备理解、生成、逻辑、记忆…

【云原生】k8s存储管理中ConfigMap Secret的使用

目录 1 ConfigMap 1.1 简介 1.2 优点 1.3 定义 ConfigMap 1.4 使用 2 Secret 2.1 简介 2.1 定义 Secret 2.2 使用 1 ConfigMap 1.1 简介 在 Kubernetes 中&#xff0c;ConfigMap 是一种用于存储非敏感信息的 Kubernetes 对象。它用于存储配置数据&#xff0c;如键值…

Vue 2 动态组件和异步组件

先阅读 【Vue 2 组件基础】中的初步了解动态组件。 动态组件与keep-alive 我们知道动态组件使用is属性和component标签结合来切换不同组件。 下面给出一个示例&#xff1a; <!DOCTYPE html> <html><head><title>Vue 动态组件</title><scri…