当前位置: 首页 > news >正文

爬虫面试手册

爬虫面试手册

薪资13~20k
岗位职责:
  1. 负责公司数据平台的数据采集、运维优化;
  2. 负责自动化脚本,爬虫脚本;
  3. 研究数据采集策略和防屏蔽规则,提升数据采集系统的稳定性、可扩展性,提高抓取的效率和质量;
岗位要求
  1. 本科及以上学历,计算机、信息科学及相关专业毕业;
  2. 熟悉java、python或go编程语言,熟悉分布式多线程编程,熟悉网络协议及数据交换标准;
  3. 熟悉反爬原理,有成熟的绕过网站屏蔽解决方案;
  4. 熟悉scrapy、nutch等常用爬虫框架及原理;
  5. 熟悉app抓取技术,熟悉常规反爬虫策略和规避方法,能够独立承担爬虫运维工作;
  6. 熟悉beautifulsoup、selenium技术等;
  7. 使用过爬虫工具八爪鱼、火车头等;
  8. 能解决封账号、封IP、验证码识别、图像识别、风控等问题、有解决封号经验优先;
  9. 具有丰富的JS逆向经验,熟悉反混淆、JS跟踪、JS 逆向、WASM、JSVMP还原技能;
  10. 熟练使用AST还原JS、能绕过常见的JS反调试;
  11. 分析问题逻辑清晰,有高度的责任心,有良好的团队协作意识和沟通能力,善于学习和钻研技术;
  12. 加分项:爬取数据日均超100w次,深度参与至少一个大规模分布式爬虫系统的架构设计。

  1. http 协议与 https 协议的区别?
    1. http 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用;
    2.  http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl加密传输协议;
    3. http 和 https 使用的是完全不同的连接方式,用的端口不一样,前者是 80,后者是 443;
    4. http 的连接很简单,是无状态的,https 协议是有 ssl +http 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全;
  2. 什么是 robots 协议?阐述 robots 协议与 爬虫的关系?
    1. Robots 协议是约定哪些内容允许哪些爬虫抓取;
    2. 通用爬虫无需遵守 robots 协议,而我们写的聚焦爬虫则需要遵守。
  3. 简述聚焦爬虫的设计思路
    1. 确定 url,模拟浏览器向服务器发送请求;
    2. 获取响应数据并进行数据解析;
    3. 将目标数据持久化到本地;
  4. 简述爬虫的分类及各类爬虫的概念
    1. 通用爬虫:爬取网页数据,为搜索引擎提供检索服务;
    2. 聚焦爬虫:针对某一领域爬取特定数据的爬虫;又分为深度爬虫和增量式爬虫。
  5. 请写出 8 中常用的请求方法

Get、 Post、Put、 Delete、Trace、 Head、Connect、Option

  1. 列举反爬虫机制
    1. UA 检测;
    2. Robots 协议;
    3. 验证码;
    4. IP 封禁;
    5. 账号封禁;
    6. 动态数据加载;
    7.  Js 数据加密;
    8. 隐藏参数;
    9. 字体反爬
  2. Requests 模块发送 get 请求的参数
    1. Url;
    2. Headers;
    3. Params;
    4. Proxies;
  3. Requests 发送请求时携带 headers 参数及作用
    1. User-Agent:实现 UA 伪装;
    2. Cookie:模拟登陆;
    3. Connection:保持连接;
    4. Accept:接受数据类型。
  4. Requests 向服务器发送文件时,文件的打开模式是什么?

Wb

  1. Requests 模块那个类自动封装 cookie

session

  1. 针对 requests 请求的响应对象,如何获取其文本形式,二进制形式及 json数据
    1. Res.text:获取 html 源码;
    2. Res.content:获取二进制流,多用于图片、视频下载等;
    3. Res.json():获取 json 数据,多用 ajax 请求。
  2. 请列举数据持久化的方式

Csv、Json、Mysql、Mongodb、Redis

  1. Cookie 和 session 的区别?
    1. 数据存储位置不同,cookie 存在客户端,session 存在服务器;
    2. 安全程度不同,cookie 存客户端本地,分析 cookie,实现 cookie 欺骗,考虑到安全性,所以用 session;
    3. 性能不同,session 存服务器,访问量大时,会增加服务器负载,考虑到性能,所以用 cookie;
    4. 数据存储大小不同,单个 cookie 不超过 4k,部分浏览器会限制 cookie的存储个数,但 session 存在服务器,故不受客户端浏览器限制。
  2. 请写出 tcp/udp 协议,ip 协议,arp 协议,http/https 协议及 ftp 协议分别位于 tcp/ip 五层模型的哪一层。
    1. TCP/UDP 协议:传输层;
    2. IP:网络层;
    3. ARP 协议:数据链路层;
    4. HTTP/HTTPS:应用层;
    5. FTP 协议:应用层。
  3. 出 tcp/ip 五层模型
    1. 应用层;
    2. 传输层;
    3. 网络层;
    4. 数据链路层;
    5. 物理层。
  4. 谈谈 tcp 三次握手四次挥手中为什么要三次握手?
    1. TCP 连接的三次握手是为了建立可靠的连接;
    2. 第一次握手:客户端向服务器发送 SYN 包,并进入 SYN_SENF 状态,等待服务器确认;
    3. 第二次握手:服务器收到 SYN 包,确认并发送 SYN+ACK 包,同时进入 SYN_RECV 状态;
    4. 第三次握手:客户端收到服务器 SYN+ACK 包,向服务器确认 ACK 包,进入 ESTABLISHED 状态
  5. 请写出 ftpssh、mysql、MongoDB、redis 协议或软件的默认端口
    1. ftp:21;
    2. Ssh:22;
    3. Mysql:3306;
    4. Mongodb:27017;
    5. Redis:6379。
  6. Mongodb 数据库的优点。
    1. 模式自由,面向集合存储,项目增删字段不影响程序运行;
    2. 具有丰富的查询表达式,支持动态查询,以满足项目的数据查询需求;
    3. 良好的索引支持,文档内嵌对象和数组,均可创建索引;
    4. 支持二进制数据存储,可以将图片视频等文件转换为二进制流存储起来;
    5. 以内存映射为存储引擎,大幅度提升性能。
  7. 多线程爬虫共封装了几个类?每个类的作用是什么
    1. 两个类:爬虫类、解析类;
    2. 爬虫类;定义爬取的行为,将响应数据提交给响应数据队列;
    3. 解析类:定义数据解析规则并与数据库交互,将数据持久化进数据库。
  8. 简述 scrapy 五大核心组件及作用。
    1. 引擎:负责各个组件之间的通讯信号及数据的传递;
    2. 爬虫:定义了爬取行为和解析规则,提交 item 并传给管道;
    3. 调度器:接受引擎传递的 request,并整理排列,然后进行请求的调度;
    4. 下载器:负责下载 request,提交响应给引擎,引擎传递给 spider;
    5. 管道: 负责处理 spider 传递来 的 item,如 去重、持久化存储等。
  9. Scrapy 框架有哪些优点?
    1. 框架封装的组件丰富,适用于开发大规模的抓取项目;
    2. 框架基于 Twisted 异步框架,异步处理请求,更快捷,更高效;
    3. 拥有强大的社区支持,拥有丰富的插件来扩展其功能;
  10. 如何判断 scrapy 管道类是否需要 return item?

在 scrapy 框架中,可以自定义多个管道类,以满足不同的数据持久化需求,当定义多管理类时,多个管道需传递 item 来进行存储,管道类各有自己的权重,权重越小,我们认为越接近引擎,越先接受引擎传递来的 item 进行存储, 故欲使权重大的管道能够接受到 item,前一个管道必须 return item,如果一个管道类后无其他管道类,该管道则无需return item。

  1. 请问为什么下载器返回的相应数据不是直接通过擎传递给管道,而是传递给 spider?

由于在 scrapy 中,spider 不但定义了爬取的行为,还定义了数据解析规则,所以响应数据需传递给 spider 进行数据解析后,才能将目标数据传递给管道,进行持久化存储。

  1. 简述详情页爬取的思路
    1. 访问列表页;
    2. 从列表页的响应数据中获取详情页 url;
    3. 请求详情页 url,使用 scrapy.request 手动发送请求并指定回调;
    4. 解析数据在回调中获取目标数据;
  2. 简述多页爬取的思路
    1. 思路一:将所有的页面 url 生成后放在 start_urls 中,当项目启动后会对 start_urls 中的 url 发起请求,实现多页爬取;
    2. 思路二:在解析方法中构建 url,使用 scrapy 手动发送请求并指定回调,实现多页爬取。
  3. 请谈谈动态数据加载的爬取思路

在 scrapy 项目中正常对动态加载的页面发起请求,在下载中间件中拦截动态加载页面的响应数据,在process_response方法中,调用selenium抓取相应的 url,获取 html 源码后再替换原有响应

  1. 请列举种反爬机制及其对应的反爬策略
    1. Ua检测:ua 伪装;
    2. Robots 协 议 : requests 模 块 无 须 理 会 , settings 配 置 中 将ROBOTSTXT_OBEY 改为 False;
    3. 动态数据加载:selenium 抓取;
    4. 图片懒加载:根据响应数据获取实际的 src 属性值;
    5. Ip 封禁:使用代理 ip。

相关文章:

爬虫面试手册

爬虫面试手册 薪资13~20k 岗位职责: 负责公司数据平台的数据采集、运维优化;负责自动化脚本,爬虫脚本;研究数据采集策略和防屏蔽规则,提升数据采集系统的稳定性、可扩展性,提高抓取的效率和质量; 岗位要求 本科及…...

k8s cephfs(动态pvc)

官方参考文档:GitHub - ceph/ceph-csi at v3.9.0 测试版本 Ceph Version Ceph CSI Version Container Orchestrator Name Version Tested v17.2.7 v3.9.0 Kubernetes v1.25.6 安装Ceph-csi Step 1 Download GitHub - ceph/ceph-csi at v3.9.0 rootsd-k8s…...

dubbo复习:(9)配置中心的大坑,并不能像spring cloud那样直接从配置中心读取自定义的配置

配置中心只是为 Dubbo 配置提供管理使用的(比如配置服务超时时间等)。不要尝试通过Value类似的方式从dubbo 配置中心(比如nacos、zookeeper、Apollo)来获取数据 https://github.com/apache/dubbo/issues/11200可以在application.yml中主要写注册中心的配置&#xf…...

建设现代智能工业-智能化、数字化、自动化节能减排

建设现代智能工业-智能化节能减排 遵循“一体化”能源管理(Integrated Energy Management)的设计宗旨,集成城市各领域(如工业.交通、建筑等)的能源生产和消费信息,面向城市政府、企业、公众三类实体,提供“一体化”的综合能源管理…...

据报导,SK海力士的HBM团队源自三星,暗示三星不幸失去HBM优势

最新科技动态显示,三星的高带宽记忆体(High Bandwidth Memory, HBM)技术尚未获得GPU巨头英伟达(NVIDIA)的认证,导致其落后于竞争对手SK海力士。这一挫折直接导致三星半导体部门负责人更迭。尽管三星官方否认…...

Verilog HDL基础知识(一)

引言:本文我们介绍Verilog HDL的基础知识,重点对Verilog HDL的基本语法及其应用要点进行介绍。 1. Verilog HDL概述 什么是Verilog?Verilog是IEEE标准的硬件描述语言,一种基于文本的语言,用于描述最终将在硬件中实现…...

Django之文件上传(一)

一、环境搭建 建立项目 django-admin startproject project_demo配置数据库(以MySQL为例) # settings.py DATABASES = {default: {ENGINE: django.db.backends.mysql,NAME: django_file4,USER: root,PASSWORD: 123,HOST: 192.168.31.151,PORT: 3306,} }建立模型 class UploadF…...

光纤现网与接入网概念对应

OLT 一般在机房 一级分光可能在机房也可能在光交交接箱 路边的光交交接箱功能有分光或者光纤汇聚转换一下 二级分光在分光光纤箱里,楼道里面挂着的那种 ONU是家里的光猫...

通过扩展指令增强基于覆盖引导的模糊测试

本文由Bruno Oliveira于2024年4月25日发表于IncludeSec的官方网站上。作为IncludeSec的安全研究人员,在他们日常的安全审计和渗透测试工作中,有时需要为客户开发一些模糊测试工具。在安全评估方法中使用模糊测试技术,可以有效地在复杂的现代化…...

第一节:Redis的数据类型和基本操作

最近整理了关于Redis的一些文档,分享给大家,后续会持续更新...... Redis的数据类型 字符串String String:字符串,可以存储String、Integer、Float型的数据,甚至是二进制数据,一个字符串最大容量是512M 列表…...

组件的传参等

一:组件的生命周期函数 组件的生命周期函数: created只是创建了组件内的实例对象 attached,给组件实例绑定了属性,绑定到页面节点树之后 ready准备好渲染之后,还未渲染之前 moved组件实例被移动到另一个位置后执行 detached在整个组件被被移除执行 error执行的时候,组件内…...

构建php环境、安装、依赖、nginx配置、ab压力测试命令、添加php-fpm为系统服务

目录 php简介 官网php安装包 选择下载稳定版本 (建议使用此版本,文章以此版本为例) 安装php解析环境 准备工作 安装依赖 zlib-devel 和 libxml2-devel包。 安装扩展工具库 安装 libmcrypt 安装 mhash 安装mcrypt 安装php 选项含…...

服装服饰商城小程序的作用是什么

要说服装商家,那数量是非常多,厂家/经销门店/小摊/无货源等,线上线下同行竞争激烈,虽然用户群体广涵盖每个人,但每个商家肯定都希望更多客户被自己转化,渠道运营方案营销环境等不可少。 以年轻人为主的消费…...

HNU-计算机体系结构-实验2-Tomasulo算法

计算机体系结构 实验2 计科210X 甘晴void 202108010XXX 1 实验目的 熟悉Tomasulo模拟器同时加深对Tomasulo算法的理解,从而理解指令级并行的一种方式-动态指令调度。 掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么…...

深入分析 Android Activity (一)

文章目录 深入分析 Android Activity (一)1. Activity 的窗口管理2. Activity 的生命周期管理onCreateonStartonResumeonPauseonStoponDestroyonRestart 3. Activity 与 Fragment 的交互添加 FragmentFragment 的生命周期 4. Activity 的任务和返回栈5. 配置变化处理 总结 深入…...

Python 调整PDF文件的页面大小

在处理PDF文件时,我们可能会遇到这样的情况:原始PDF文档不符合我们的阅读习惯,或者需要适配不同显示设备等。这时,我们就需要及时调整PDF文档中的页面尺寸,以满足不同应用场景的需求。 利用Python语言的高效性和灵活性…...

支付功能、支付平台、支持渠道如何测试?

有学员提问:作为一个支付平台,接入了快钱、易宝或直连银行等多家的渠道,内在的产品流程是自己的。业内有什么比较好的测试办法,来测试各渠道及其支持的银行通道呢? 作为产品,我自己办了十几张银行卡方便测…...

永久代(Permanent Generation)和元空间(Metaspace)

永久代(Permanent Generation)和元空间(Metaspace)是Java虚拟机(JVM)内存管理中的两个概念,主要区别在于它们的实现方式和内存分配策略。 永久代(Permanent Generation)…...

前端面试题23-34

23. 说说你对 Promise 的理解 Promise 是 ECMAScript6 引入的一种异步编程解决方案,用于处理异步操作。它表示一个尚未完成但最终会结束的操作,具有三种状态:pending(进行中)、fulfilled(已完成&#xff0…...

Hadoop3:HDFS中DataNode与NameNode的工作流程

一、DataNode中的数据情况 数据位置 /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-823420375-192.168.31.102-1714395693863/current/finalized/subdir0/subdir0块信息 每个块信息,由两个文件保存,xxx.meta保存的是数据长度、校验和、时间戳&am…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

DAY 26 函数专题1

函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...