爬虫面试手册

爬虫面试手册

薪资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。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚安08

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值