爬虫面试手册

爬虫面试手册

薪资1 3 ~2 0 k
岗位职责:
  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次,深度参与至少一个大规模分布式爬虫系统的架构设计。

  13. http 协议与 https 协议的区别?

    1. http 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用;
    2. http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl加密传输协议;
    3. http 和 https 使用的是完全不同的连接方式,用的端口不一样,前者是 80,后者是 443;
    4. http 的连接很简单,是无状态的,https 协议是有 ssl +http 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全;
  14. 什么是 robots 协议?阐述 robots 协议与 爬虫的关系?

    1. Robots 协议是约定哪些内容允许哪些爬虫抓取;
    2. 通用爬虫无需遵守 robots 协议,而我们写的聚焦爬虫则需要遵守。
  15. 简述聚焦爬虫的设计思路

    1. 确定 url,模拟浏览器向服务器发送请求;
    2. 获取响应数据并进行数据解析;
    3. 将目标数据持久化到本地;
  16. 简述爬虫的分类及各类爬虫的概念

    1. 通用爬虫:爬取网页数据,为搜索引擎提供检索服务;
    2. 聚焦爬虫:针对某一领域爬取特定数据的爬虫;又分为深度爬虫和增量式爬虫。
  17. 请写出 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. 请写出 ftp ssh、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。
相关推荐
Lee川2 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i4 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有4 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有4 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫5 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫5 小时前
Handler基本概念
面试
Wect6 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼6 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼6 小时前
Next.js 企业级落地
前端·javascript·面试
掘金安东尼6 小时前
React 性能优化完全指南 2026
前端·javascript·面试