首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
别问了别问了答不出来了
门头沟学院 后端工程师
发布于湖北
关注
已关注
取消关注
mark
@编程文青李狗蛋:
附答案 | 最强Python面试题之爬虫框架问题
写在之前 大家好呀,我是帅蛋。 好久没来更新最强面试题系列啦,大家快把“想我”大大的打在评论区,哈哈哈哈哈哈~ 今天来更新 Python 最强爬虫框架面试,这一部分一共 13 道题。Python 面试八股文尽在帅蛋的【最强Python面试题】,大家一定要记得点赞收藏呀!!! 欢迎和帅蛋聊一聊~扣扣2群:609771600,获取最新秋招信息 & 内推进度,日常聊聊迷茫吹吹牛皮,抱团取暖 顺便提一句,我所有和面试相关的内容都会放在#帅蛋的面试空间# 中,大家可以关注下这个话题~ 我会尽我最大的努力帮助到大家哒!!! 主要内容 这些面试题是我结合自己的经验整理的,主要就是下面这 5 个专题: Python 基础面试题(已完成) Python 进阶(已完成) Python 后台开发(已完成) 爬虫 机器学习 PS:往期文章可以看文末链接哟~ 对每道面试题我都会附带详细的答案,有些我觉得重要的内容会详细讲解,虽然是面试八股文,我还是希望大家不是只“知其然”,更得“知其所以然”。 关于更新频率,每天我会更新 10 道题左右,总共会有差不多 200 道。 无论是准备面试还是自己学习,这份面试题绝对值得你去看,去学习。 大家可以关注我,再关注我,使劲关注我,不要错过每天的更新~ 以下是正文 Python 爬虫框架问题,大家一定要记得点赞收藏,一起加油!欢迎和帅蛋聊一聊~扣扣2群:609771600,获取最新秋招信息 & 内推进度,日常聊聊迷茫吹吹牛皮,抱团取暖 1、描述下 scrapy 框架运行的机制? 从 start_urls 里获取第一批 url 并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理: (1) 如果提取出需要的数据,则交给管道文件处理; (2) 如果提取出 url,则继续执行之前的步骤(发送 url 请求,并由引擎将请求交给调度器入队列...),直到请求队列里没有请求,程序结束。 2、谈谈你对 Scrapy 的理解? scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容。Scrapy 使用了 Twisted 异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。 scrapy 框架的工作流程: (1) 首先 Spiders(爬虫)将需要发送请求的 url(requests)经 ScrapyEngine(引擎)交给 Scheduler(调度器) (2) Scheduler(排序,入队)处理后,经 ScrapyEngine,DownloaderMiddlewares(可选,主要有 User_Agent, Proxy 代理)交给 Downloader (3) Downloader 向互联网发送请求,并接收下载响应(response)。将响应(response)经ScrapyEngine,SpiderMiddlewares(可选)交给 Spiders (4)Spiders 处理 response,提取数据并将数据经 ScrapyEngine 交给 ItemPipeline 保存(可以是本地,可以是数据库)。提取 url 重新经 ScrapyEngine 交给 Scheduler 进行下一个循环。直到无 Url 请求程序停止结束 3、什么是增量爬取? 增量爬取即保存上一次状态,本次抓取时与上次比对,如果不在上次的状态中,便视为增量,保存下来。对于 scrapy 来说,上一次的状态是抓取的特征数据和上次爬取的 request 队列(url 列表),request 队列可以通过 request 队列可以通过 scrapy.core.scheduler 的 pending_requests 成员得到,在爬虫启动时导入上次爬取的特征数据,并且用上次 request 队列的数据作为 start url 进行爬取,不在上一次状态中的数据便保存。 选用 BloomFilter 原因:对爬虫爬取数据的保存有多种形式,可以是数据库,可以是磁盘文件等,不管是数据库,还是磁盘文件,进行扫描和存储都有很大的时间和空间上的开销,为了从时间和空间上提升性能,故选用 BloomFilter 作为上一次爬取数据的保存。保存的特征数据可以是数据的某几项,即监控这几项数据,一旦这几项数据有变化,便视为增量持久化下来,根据增量的规则可以对保存的状态数据进行约束。比如:可以选网页更新的时间,索引次数或是网页的实际内容,cookie 的更新等。 4、爬虫向数据库存数据开始和结束都会发一条消息,是 scrapy 哪个模块实现的? Scrapy 使用信号来通知事情发生,因此答案是 signals 模块。 5、爬取下来的数据如何去重,说一下具体的算法依据? (1)通过 MD5 生成电子指纹来判断页面是否改变 (2) nutch 去重。nutch 中 digest 是对采集的每一个网页内容的 32 位哈希值,如果两个网页内容完全一样,它们的 digest 值肯定会一样。 数据量不大时,可以直接放在内存里面进行去重,python 可以使用 set()进行去重。当去重数据需要持久化时可以使用 redis 的 set 数据结构。 当数据量再大一点时,可以用不同的加密算法先将长字符串压缩成 16/32/40 个字符,再使用上面两种方法去重。 当数据量达到亿(甚至十亿、百亿)数量级时,内存有限,必须用“位”来去重,才能够满足需求。Bloomfilter 就是将去重对象映射到几个内存“位”,通过几个位的 0/1 值来判断一个对象是否已经存在。 然而 Bloomfilter 运行在一台机器的内存上,不方便持久化(机器 down 掉就什么都没啦),也不方便分布式爬虫的统一去重。如果可以在 Redis 上申请内存进行 Bloomfilter,以上两个问题就都能解决了。 simhash 最牛逼的一点就是将一个文档,最后转换成一个 64 位的字节,暂且称之为特征字,然后判断重复只需要判断他们的特征字的距离是不是<n(根据经验这个 n 一般取值为 3),就可以判断两个文档是否相似。 可见 scrapy_redis 是利用 set 数据结构来去重的,去重的对象是 request 的 fingerprint(其实就是用 hashlib.sha1()对 request 对象的某些字段信息进行压缩)。其实 fp 就是 request 对象加密压缩后的一个字符串(40 个字符,0~f)。 6、Scrapy 的优缺点? 优点 (1) scrapy 是异步的 (2) 采取可读性更强的 xpath 代替正则 (3)强大的统计和 log 系统 (4) 同时在不同的 url 上爬行 (5) 支持 shell 方式,方便独立调试 (6) 写 middleware,方便写一些统一的过滤器 (7) 通过管道的方式存入数据库 缺点 (1) 基于 python 的爬虫框架,扩展性比较差 (2) 基于 twisted 框架,运行中的 exception 是不会干掉 reactor(反应器),并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。 7、什么是 scrapy-redis 中的指纹?是如何去重的? 指纹 通过 sha1 加密,把请求体,请求方式,请求 url 放在一起。然后进行 16 进制的转义符字符串生成指纹。生成一个字符串,放到数据库中作为唯一标示。 去重 url 中按照 url 去重: (1) 按照 url 去重,有一个列表,发送请求之前从数据表中看一下这个 url有没有请求过,请求过了就不用看了 (2) 内容判断,从数据库中查数据的表示,如果请求过了就在不在请求了。 8、怎么设置深度爬取? 通过在 settings.py 中设置 depth_limit 的值可以限制爬取深度,这个深度是与 start_urls 中定义 url 的相对值。也就是相对 url 的深度。若定义 url 为 http://www.domz.com/game/,depth_limit=1 那么限制爬取的只能是此 url 下一级的网页。深度大于设置值的将被忽视。 9、scrapy 和 scrapy-redis 有什么区别?为什么选择 redis 数据库? scrapy 是一个 Python 爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。而scrapy-redis 一套基于 redis 数据库、运行在 scrapy 框架之上的组件,可以让 scrapy 支持分布策略,Slaver 端共享 Master 端 redis 数据库里的 item 队列、请求队列和请求指纹集合。 为什么选择 redis 数据库,因为 redis 支持主从同步,而且数据都是缓存在内存中的,所以基于 redis的分布式爬虫,对请求和数据的高频读取效率非常高。 10、分布式爬虫主要解决什么问题? 主要解决一下 4 个问题: (1) ip (2) 带宽 (3) cpu (4) io 11、什么是反向代理?作用是什么? 代理可以假扮 Web 服务器。这些被称为替换物(surrogate)或反向代理(reverse proxy)的代理接收发送给 Web 服务器的真实请求,但与 Web 服务器不同的是,它们可以发起与其他服务器的通信,以便按需定位所请求的内容。 可以用这些反向代理来提高访问慢速 Web 服务器上公共内容的性能。在这种配置中,通常将这些反向代理称为服务器***(server accelerator)。还可以将替换物与内容路由功能配合使用,以创建按需复制内容的分布式网络。 12、什么是分布式存储? 传统定义 分布式存储系统是大量 PC 服务器通过 Internet 互联,对外提供一个整体的服务。 分布式存储系统具有以下特性 (1) 可扩展:分布式存储系统可以扩展到几百台甚至几千台这样的一个集群规模,系统的整体性能线性增长。 (2) 低成本:分布式存储系统的自动容错、自动负载均衡的特性,允许分布式存储系统可以构建在低成本的服务器上。另外,线性的扩展能力也使得增加、减少服务器的成本低,实现分布式存储系统的自动运维。 (3) 高性能:无论是针对单台服务器,还是针对整个分布式的存储集群,都要求分布式存储系统具备高性能。 (4) 易用:分布式存储系统需要对外提供方便易用的接口,另外,也需要具备完善的监控、运维工具,并且可以方便的与其他的系统进行集成。分布式存储系统的挑战主要在于数据和状态信息的持久化,要求在自动迁移、自动容错和并发读写的过程中,保证数据的一致性。 (5) 容错:可以快速检测到服务器故障,并自动的将在故障服务器上的数据进行迁移。 (6) 负载均衡:新增的服务器在集群中保障负载均衡?数据迁移过程中保障不影响现有的服务。 (7) 事务与并发控制:实现分布式事务。 (8) 易用性:设计对外接口,使得设计的系统易于使用。 13、你所知道的分布式爬虫方案有哪些? 3 种分布式爬虫策略 (1) Slaver 端从 Master 端拿任务(Request/url/ID)进行数据抓取,在抓取数据的同时也生成新任务,并将任务抛给 Master。Master 端只有一个 Redis 数据库,负责对 Slaver 提交的任务进行去重、加入待爬队列。 优点: scrapy-redis 默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作 scrapy-redis 都已经帮我们做好了,我们只需要继承 RedisSpider、指定 redis_key 就行了。 缺点: scrapy-redis 调度的任务是 Request 对象,里面信息量比较大(不仅包含 url,还有 callback 函数、headers 等信息),导致的结果就是会降低爬虫速度、而且会占用 Redis 大量的存储空间。当然我们可以重写方法实现调度 url 或者用户 ID。 (2) Master 端跑一个程序去生成任务(Request/url/ID)。Master 端负责的是生产任务,并把任务去重、加入到待爬队列。Slaver 只管从 Master 端拿任务去爬。 优点: 将生成任务和抓取数据分开,分工明确,减少了 Master 和 Slaver 之间的数据交流;Master 端生成任务还有一个好处就是:可以很方便地重写判重策略(当数据量大时优化判重的性能和速度还是很重要的)。 缺点: 像 QQ 或者新浪微博这种网站,发送一个请求,返回的内容里面可能包含几十个待爬的用户 ID,即几十个新爬虫任务。但有些网站一个请求只能得到一两个新任务,并且返回的内容里也包含爬虫要抓取的目标信息,如果将生成任务和抓取任务分开反而会降低爬虫抓取效率。毕竟带宽也是爬虫的一个瓶颈问题,我们要秉着发送尽量少的请求为原则,同时也是为了减轻网站服务器的压力,要做一只有道德的 Crawler。所以,视情况而定。 3.Master 中只有一个集合,它只有查询的作用。Slaver 在遇到新任务时询问 Master 此任务是否已爬,如果未爬则加入 Slaver 自己的待爬队列中,Master 把此任务记为已爬。它和策略一比较像,但明显比策略一简单。策略一的简单是因为有 scrapy-redis 实现了 scheduler 中间件,它并不适用于非 scrapy 框架的爬虫。 优点: 实现简单,非 scrapy 框架的爬虫也适用。Master 端压力比较小,Master 与 Slaver 的数据交流也不大。 缺点:“健壮性”不够,需要另外定时保存待爬队列以实现“断点续爬”功能。各 Slaver 的待爬任务不通用。 如果把 Slaver 比作工人,把 Master 比作工头。策略一就是工人遇到新任务都上报给工头,需要干活的时候就去工头那里领任务;策略二就是工头去找新任务,工人只管从工头那里领任务干活;策略三就是工人遇到新任务时询问工头此任务是否有人做了,没有的话工人就将此任务加到自己的“行程表”。 已完成 Python 基础题 附答案 | 最强Python面试题之Python基础题(1) 附答案 | 最强Python面试题之Python基础题(2) 附答案 | 最强Python面试题之Python基础题(3) 附答案 | 最强Python面试题之Python基础题(4) Python 进阶题 附答案 | 最强Python面试题之Python进阶题第一弹 附答案 | 最强Python面试题之Python进阶题第二弹 附答案 | 最强Python面试题之Python进阶题第三弹 附答案 | 最强Python面试题之Python进阶题第四弹 Python 后台开发 附答案 | 最强Python面试题之Python开发第一弹 附答案 | 最强Python面试题之Python开发第二弹 附答案 | 最强Python面试题之Python开发第三弹 附答案 | 最强Python面试题之Python开发第四弹 以上就是今天的内容,我是帅蛋,我们明天见~ ❤️ 欢迎关注我,有问题,找帅蛋,我最看不得别人迷茫! ❤️ 如果你觉得有帮助,希望爱学习的你不要吝啬三连击哟[点赞 + 收藏 + 评论]~ 还有小小公众号 【编程文青李狗蛋】,聊聊迷茫吹吹牛皮~
点赞 33
评论 10
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
2025-12-23 22:03
库洛游戏_系统策划(准入职员工)
步步高内推,步步高内推码
步步高实验学校 2026届校招启动啦【学校简介】东莞市步步高实验学校于 2023 年投入运营,占地 230 亩,是一所集幼儿园、小学、初中、高中于一体的十五年一贯制非营利性高端民办学校,学校全面实行小班化教学,学校师生比为 1:5;步步高教育专家团队由来自一流大学的国家课标专家、教育学家,来自著名学校的卓越校长,来自一线、有着丰富教学经验的著名特级教师,以及来自国家级教育媒体的教育策划专家共同组成,为步步高的课程、教学、管理奠定了坚实基础。【招聘岗位】• 幼儿园、小学部及初中部各学科类教师 & 国际教师,类别多多,等你pick! 【福利待遇】• 薪资:幼儿园老师年收入16万起 、中小学...
投递小天才等公司10个岗位
点赞
评论
收藏
分享
2025-12-28 18:53
门头沟学院 golang
【面经】网宿科技-Go后端开发实习-二面面经
bg:9本大二/主go/一段实验室打工经历 二面感觉问得深很多,面试官笑呵呵的很有压力 1. 项目深挖(短链接生成系统 - 架构设计与一致性) 面试官: 请简单介绍一下这个短链接生成系统的核心流程。 面试官: 你为什么引入 Redis?如果去掉 Redis 直接抗 5000 QPS,PostgreSQL 的瓶颈大概会出在哪里? 面试官: 短链接生成的算法你用的哪种?如果是 Hash 算法,产生碰撞(Conflict)了你如何在代码层面解决? 面试官: 谈谈你提到的一致性方案:先更新数据库,再删除缓存。 面试官: 如果数据库更新成功,但删除缓存失败了,此时会有脏数据。除了重试机制,你了解“延迟...
发面经攒人品
点赞
评论
收藏
分享
2025-11-27 12:05
门头沟学院 Java
懂了...大厂是个给我发钱的大学
来美团快半年了,真的感觉像在上学,还是带薪的那种。每个新人都有导师带,从业务到技术,手把手教。遇到问题随时问,导师还会主动约一对一,分享经验和方法论。而且学城太实用了,项目文档、技术方案、踩坑经验,想查什么都有,比大学图书馆还全。最舒服的是团队氛围,同事之间很友好,有问题大家都会帮忙,没有那种冷冰冰的感觉。每天上班就像去学校,还能拿工资,这感觉真的不错
牛马人的牛马人生:
大厂干一年比得上大学生涯
美团公司福利 3020人发布
点赞
评论
收藏
分享
2025-11-16 15:45
桂林理工大学 测试工程师
软件测试
请各位大佬帮我看看简历,为啥线上线下的投递都没有消息
点赞
评论
收藏
分享
2025-12-29 15:51
安克创新 Anker_软件开发-业务运维(准入职员工)
广州凡岛内推,广州凡岛内推码
测评「卷不卷」灵魂拷问 "弹性打卡+5点半跑路自由"是真的! 但!前提是高效搞定KPI(划重点) 对比广州某些大厂「表演式加班」,凡岛更适合目标感强、想快速成长的狠人 (上周刚见证同组管培生半年升主管,述职PPT那句“广州不相信眼泪,但努力的人永远幸运”直接封神) ▪️ 「萌新生存法则」 1️⃣ 团队95后占70%,开会直接甩脑图互怼,但吵完立马奶茶和好 2️⃣ 公司四餐全包(粤菜湘菜川菜轮流投喂),本湖南人狂喜 3️⃣ 神舟路地铁口10分钟通勤,周边租房2k能拿下带健身房的新公寓 (广州打工人忠告:选离地铁<15分钟的房子!暴雨天就知道多救命) 【日化新锐·广州凡岛】26...
凡岛公司福利 319人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
你会和mentor进行deeptalk吗?
2974
2
...
双非本2025秋招总结:65w+SSP三选一,最终还是“有鹅选鹅”|附面试心路历程
2253
3
...
学院本 末 211 硕勇闯 java 后端实习美团 oc 逆袭指南
1606
4
...
牛客运营们,我保证这是我最后一次消费烤肠了!
1430
5
...
27届学院本一段中厂一段中大厂实习,简历求锐评
1010
6
...
元旦前被裁员了
850
7
...
我的牛客年度报告
736
8
...
实习两周遭劝退,隔天就招新人,合理吗?
717
9
...
2025年牛客年度作者丨颁奖典礼✨
701
10
...
27前端已没招
701
创作者周榜
更多
正在热议
更多
#
实习没人带,苟住还是跑路?
#
16558次浏览
313人参与
#
AI时代,哪些岗位最容易被淘汰
#
25543次浏览
217人参与
#
我们是不是被“优绩主义”绑架了?
#
11689次浏览
322人参与
#
秋招被确诊为……
#
280037次浏览
1587人参与
#
牛客2025仙途报告
#
47500次浏览
527人参与
#
每个月的工资都是怎么分配的?
#
81521次浏览
662人参与
#
字节出了豆包coding模型
#
8231次浏览
70人参与
#
对2025年忏悔
#
7861次浏览
153人参与
#
春招前还要继续实习吗?
#
9685次浏览
110人参与
#
为了秋招你都做了哪些准备?
#
30009次浏览
528人参与
#
离家近房租贵VS离家远但房租低,怎么选
#
14226次浏览
132人参与
#
2025秋招体验点评
#
86286次浏览
719人参与
#
非技术2024笔面经
#
452353次浏览
4920人参与
#
一人说一家双休的公司
#
11362次浏览
127人参与
#
牛友的国庆旅行碎片
#
26518次浏览
128人参与
#
我的第一个1024节
#
17137次浏览
251人参与
#
职场新人生存指南
#
492185次浏览
9518人参与
#
面试官问过你最刁钻的问题是什么?
#
13478次浏览
122人参与
#
工作后会跟朋友渐行渐远吗
#
54437次浏览
395人参与
#
毕业租房也有小确幸
#
152839次浏览
4533人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务