爬虫相关的面试问题

软件开发中爬虫是经常使用到的,获取一些接口数据,或者解析网页的数据。属于实践类的一些问题

1. 爬虫的合法性如何保证的?

1.1 遵守网站的 robots.txt 协议,网站根目录下面的 robots.txt 申明了爬虫权限(禁止爬取的路径、爬虫的频率限制等,是否允许将数据商业化等)

1.2 控制爬取的频率,避免高频率的请求导致网站服务器过载。

1.3 遵守个人信息保护法,爬取用户隐私数据需要符合个人信息保护法,未经允许不得收集和滥用。

查看 csdn 的 robots.txt 协议

plain 复制代码
https://blog.csdn.net/robots.txt

User-agent: *
Disallow: /images/
Disallow: /content/
Disallow: /ui/
Disallow: /js/
Disallow: /*?*

Sitemap: https://blog.csdn.net/s/map/site_map_index.xml

语雀平台的 robots.txt 协议

2. 爬虫常见的 HTTP 协议状态码有哪些?

这边主要是会和计算机网络相结合起来考察

爬虫常见的是 403 状态码,比如403 是资源禁止访问,没有对应的权限,需要更新对应的 cookie。

401 是没有登录认证,登录的 cookie 权限过期了.

405 是请求方法不允许,比如后端是 post 请求,使用了 get 请求,那么 http 的状态码就是 405.

300 状态码,可能是页面重定向了,原来的页面失效了,需要重定向页面。

301 是资源永久重定向需要更新爬虫的地址,302 是临时重定向。304 是资源未修改,服务器返回缓存数据。

500 服务器内部的错误,代码 bug、数据库连接连接失败、逻辑问题。502 服务作为网关/代理收到上有服务器的无效响应。

504 服务作为网关/代理等待上有服务器超时,比如 nginx 超时等。

3. 有哪些常见的反向爬虫机制?

网站为防止恶意爬取,常采用以下反爬机制:

  • 请求头的校验,浏览器才会特有的请求头
    • User-Agent 检测:验证请求头中的浏览器标识,禁止无标识或异常标识的请求。
    • Referer 检测:检查请求来源页面,防止跨站恶意请求。
    • Cookie 验证:要求请求携带登录状态或临时会话 Cookie,未携带则拒绝服务。
  • IP 限流:
    • IP 限流 / 封锁:对同一 IP 的高频请求限制频率,或直接封禁(表现为 403/429 状态码)。
    • 验证码:连续请求后弹出图形验证码、滑动验证码等,需人工或工具识别后才能继续。
    • 动态请求间隔:检测请求时间间隔是否规律(如固定 1 秒一次),判定为爬虫后拒绝服务。
  • 数据混淆机制
    • 动态 HTML 渲染:页面数据通过 JavaScript 异步加载(如 AJAX),直接爬取 HTML 无法获取内容。
    • 数据加密:响应数据经过加密(如 Base64、AES),需破解加密算法才能解析。
    • 假数据干扰:在页面中插入无效数据或重复数据,混淆爬虫的解析逻辑。
  • 高级追踪机制
    • Canvas 指纹 / 设备指纹:通过浏览器特性生成唯一设备标识,追踪并封锁爬虫设备。
    • JavaScript 挑战:要求客户端执行特定 JS 代码(如计算某个值),验证通过才返回数据。
    • 动态 URL 或参数:页面链接或接口参数动态生成(如带时间戳、签名),固定参数请求会失效。

通过 Iframe 嵌入页面,如果在 iframe 外部是无法定位到页面的元素的,可以实现部分的反爬虫机制。

4. 你是如何实现爬虫的?接口爬虫/页面爬虫?

4.1 接口爬虫

通过 f12 或者抓包工具抓包,查看 http 的请求方法、请求头、请求体等参数信息。

模拟接口请求,模拟对应 的 http 参数,向 API 接口发送对应的请求,拿到 JSON 的数据进行解析。

4.2 页面爬虫

数据直接嵌入 HTML 源码(如 PHP/Java 后端渲染的网站),或接口加密难以逆向(如参数被混淆加密)。

获取页面对应的 HTML 代码,通过 Jsoup 等库解析 HTML 文档

一些登录表单等数据通过 selenium 实现模拟真实用户在浏览器中的操作。

5 selenium 框架讲一讲

Selenium 是一个用于 Web 应用程序自动化测试的工具,核心能力是模拟真实用户在浏览器中的操作(如点击、输入、跳转等)

selenium 核心是 driver 驱动 浏览器的。

可以表单提交、页面跳转、截图、获取页面某些元素等操作。

6 对于 https 的接口和 http 接口爬取有啥区别?

  1. GET 和 POST 请求的区别?爬虫中如何选择使用?(考察请求方法特性:参数位置、长度限制、安全性;如爬取列表用 GET,提交表单数据用 POST)
  2. 什么是请求头(Headers)?哪些字段对爬虫很重要?(考察反爬基础:重要字段包括User-Agent(模拟浏览器)、Referer(伪装来源)、Cookie(登录状态)、Accept-Encoding(压缩方式)等)
  3. 如何应对网站的 IP 封禁?(考察代理方案:使用代理 IP 池(免费如西刺代理,付费如阿布云)、设置 IP 切换频率、结合拨号 VPS 动态换 IP;注意代理匿名度(高匿 > 普匿 > 透明))

7 讲一讲你在爬虫中遇到过哪些困难?

1 抓取速度慢,在爬取一些大型网站比如 b 站的视频评论的时候,单台服务器爬取速度太慢,使用分布式的爬虫框架、使用线程池的方式提高爬虫效率

2 接口加密,在通过接口登录某些网站的时候,对应的密码是加密的,通过浏览器的逆向调试找到 JS 加密算法,拿到加密算法,自己对自己浏览器进行加密,然后请求接口。

8 有哪些定位网页元素的方法?

通过 Id、class 名称、css 样式选择器、xpath。

通过 id 定位是比较准确的,因为页面可能会发生变化

python 复制代码
# 1. 通过ID定位(最精准,优先使用)
element = driver.find_element("id", "username")

# 2. 通过CSS选择器定位(灵活,支持复杂选择)
element = driver.find_element("css selector", "input[name='password']")

# 3. 通过XPath定位(支持路径和文本匹配,万能但性能略低)
element = driver.find_element("xpath", "//button[contains(text(), '登录')]")

# 4. 其他常用方式
driver.find_element("name", "email")  # 按name属性
driver.find_element("class name", "btn-submit")  # 按class属性
driver.find_element("tag name", "a")  # 按标签名
driver.find_element("link text", "忘记密码")  # 按链接完整文本
driver.find_element("partial link text", "忘记")  # 按链接部分文本

# 定位多个元素(返回列表)
elements = driver.find_elements("css selector", "ul li")

9 讲一讲 iframe 是啥?

<font style="color:rgba(0, 0, 0, 0.85);">iframe</font>(全称:Inline Frame,内联框架)是 HTML 中的一个标签,用于在当前网页中嵌入另一个独立的网页,实现 "页面嵌套页面" 的效果。它相当于在主页面中开辟一个 "窗口",展示其他 URL 的内容,且被嵌入的页面与主页面拥有独立的文档环境(DOM、JavaScript 上下文等)。

在多个前端项目中,想要集中到同一个软件平台中可以通过 iframe 实现嵌套,但是多个页面之间可能还需要通信,iframe 浏览器之间也可以通信。

相关推荐
PPT百科4 小时前
PPT插入的音乐怎么让它播放到某一页就停?
大数据·职场和发展·powerpoint·职场·ppt模板
m0_736927044 小时前
2025高频Java后端场景题汇总(全年汇总版)
java·开发语言·经验分享·后端·面试·职场和发展·跳槽
QMY5205204 小时前
爬虫技术抓取网站数据的方法
运维·爬虫·自动化
Croa-vo10 小时前
Citadel SDE 面试复盘:直面硬核算法与思维挑战的双重压力
算法·面试·职场和发展
Hacker_Fuchen12 小时前
外包干了一个月,技术明显进步。。。。。
自动化测试·软件测试·测试工具·职场和发展
傻啦嘿哟14 小时前
房地产爬虫实战:链家二手房数据抓取与深度分析
爬虫
User_芊芊君子14 小时前
【LeetCode经典题解】递归破解对称二叉树之谜
算法·leetcode·职场和发展
Rock_yzh14 小时前
LeetCode算法刷题——49. 字母异位词分组
数据结构·c++·学习·算法·leetcode·职场和发展·哈希算法
小欣加油14 小时前
leetcode 2654 使数组所有元素变成1的最少操作次数
数据结构·c++·算法·leetcode·职场和发展