爬虫相关面试题

news2024/10/5 13:42:09

一,如何抓取一个网站?

1,去百度和谷歌搜一下这个网站有没有分享要爬取数据的API

2, 看看电脑网页有没有所需要的数据,写代码测试调查好不好拿,如果好拿直接开始爬取

3,看看有没有电脑能打开的手机网页,一般格式为http://m.xxx.com或http://mobile.xxx.com, 有的话用F12检查抓一下包,看一下抓取的难易程度

4, 使用fiddler, 看看有没有手机APP,抓下APP的包,看能不能抓到接口,如果新版抓不到,可以尝试旧版本。

5, 尝试分析app的一些分享外链

6, 模拟器自动化控制 + 中间人攻击(mitmproxy)

7, 都能不好的话尝试selenium/airtest

8, 最后web端破解js(移动端逆向破解)

二, 常见的反爬措施以及如何解决?

1, UA检测

        使用UA池,替代UA为正常的浏览器身份

2, IP封禁

        使用代理ip, 构建ip池

3, 频率限制

        减低频率,考虑对方的代码

4, Referer防盗链

        在请求头中referer添加和网站对应的访问链

5, 登录限制

        模拟登录,使用cookie 或借助selenium等自动化工具

6, 验证码

        OCR光学字符识别, 打码平台能绕过就尽量绕过

7, js加密

        js逆向, 分析网页源代码,找出加密规则,使用python, nodejs模拟加解密

8, CSS反爬

        分析网页源代码, 避免抓取脏数据,或者请求时发送多余参数

9, 字体反爬

        找到对应的字体文件, 使用FontCreator 和 fontTools,找出编码和数据文字的对应关系

三 如何提高爬虫速度

模拟请求,页面解析, 数据存储的时候,可以使用多线程,多进程

模拟请求(减少请求次数,设置合适的timeout超时参数)

页面解析(正则re> lxml xpath > beautifulsoup css 选择器)

数据存储(excute--> excutr_many / 数据缓存)

提供更好的网络

提供质量更好的Ip

提供性能更好的硬件环境

使用分布式技术

四 如何进行大数据量爬虫(一千万一亿怎么办)

使用scrapy框架,修改设置里面的并发量参数

使用scrapy-redis分布式技术提高爬取效率

分析网站尽量少发送无用请求或者减少请求次数

使用多线程多进程异步的技术,提高请求效率,测试多少个线程爬取效果最好

ip代理池,花钱购买高质量ip,测试多久切换一次ip效果好

网络性能,抓取技术细节调优

测试超过时间这就多久效果最好

五 介绍一下scrapy框架以及有哪些优点

scrapy是一个快速(fast), 高层次(high-level)的基于python的web爬虫框架,用于爬取web站点并从页面中提取结构化数据。scrapy使用了Twisted异步网络库来处理网络通讯

请求多级页面,结构清晰

它容易构建大规模的抓取项目

它异步处理请求,速度非常快

它可以使用自动调节机制自动调整爬行速度

六 scrapy框架有哪几个组件、模块

scrapy Engine(引擎):负责 spider, ItemPipeline, Downloader, Scheduler 中间的通讯,信号,数据传递等

(DTO 数据传输对象)

Spider(爬虫): 它负责处理所有Responses ,从中分析提取数据, 获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入scheduler(调度器),

(双向队列)

Scheduler(调度器):它负责接收引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时, 交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests 请求,并将其获取到的Responses交还给Scrapy Engine引擎, 由引擎交给Spider 来处理

Item Pipeline(管道):它负责处理Spider中获取到的Item,并且经过后期处理(详细分析,过滤, 存储等)的地方。

Downloader Middlewares(下载中间件): 一个可以自定义扩展下载功能的组件。

Spider Middlewares (Spider中间件): 可以扩展操作引擎和spider中间通讯的功能组件。

七 scrapy的工作流程

1, 爬取中起始的url构造成request对象,并传递给调度器。

2, 引擎从调度器中获取request对象,然后交给下载器

3, 由下载器来获取到页面源代码,并封装成Response对象,并反馈给引擎。

4, 引擎将获取到的Response对象传递给spider,由spider对数据进行解析(parse),并反馈给引擎。

5, 引擎将数据传递给pipeline进行数据持久化保存或进一步的数据处理

6, 再次期间如果spider中提取到的并不是数据,而是子页面url,可以进一步提交给调度器,进而重复步骤2的过程。

八 scrapy的去重原理(请求去重)

将请求相关信息进行sha1哈希处理,将四个字段(请求方法, 请求链接, post参数,请求头)进行信息摘要,摘要结果在使用set集合进行去重

fingerprint_data = {
    'method' : to_unicode(request.method),
    'url': canonicalize_url(request.url, keep_fragments=keep_fragments),
    'body':(request.body or b'').hex(),
    'headers' : headers,
    
}
fingerprint_json = json.dumjps(fingerprint_data, sort_key=True)
cache[cache_key] = hashlib.sha1(fingerprint_json.encode()).digest()

九 scrapy如何设置代理IP

在下载中间件的process_requests方法中进行处理,利用scrapy的meta参数的特殊键proxy,再使用代理IP服务商提供的动态代理或者隧道代理,proxy的值设置为代理服务器地址就可以了

十 什么是分布式

分布式系统是由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的,普通的机器完成单个计算机无法完成的计算,存储任务。其目的是利用更多的机器,处理更多的数据。

分布式爬虫则是将多台主机组合起来,共同完成爬取任务,这将大大提高爬取效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新加坡裸机云多IP服务器为何适合跨境外贸业务

新加坡裸机云多IP服务器在跨境外贸业务中展现出了卓越的适配性,其独特优势为外贸企业提供了强大的支持。以下将详细阐述为何新加坡裸机云多IP服务器是跨境外贸业务的理想选择。 首先,新加坡裸机云多IP服务器在性能上表现出色。由于去除了虚拟化层的开销&…

2024端午节活动回顾,传承经典文化,共铸企业精神之魂!

端午佳节来临,为了弘扬中华民族优秀的传统文化,国际数字影像产业园开展了“端午粽动员,尽情放粽”端午节主题活动,把节日的祝福送到了全体职工的身边。 此次端午节活动时间为上午9点半至下午1点,活动地点设置在国际数…

19.1 HTTP客户端-HTTP协议、GET请求、POST请求

1. HTTP协议 TCP/IP协议栈由上至下分为以下四层: 应用层:为用户提供应用服务时的通信活动 DNS、FTP(文件传输)、HTTP(超文本传输)传输层:网络中两台计算机之间的数据传输 TCP、UDP、SPX网络层…

百问网全志V853开发板烧录开发板系统教程

烧录开发板系统 注意:此方式烧录进的文件系统是ubifs文件系统,如果操作 需要网络文件系统挂载或者使用TF卡,不推荐使用。 准备工作 1.100ASK-V853-Pro开发板 x1 2. 下载全志线刷工具AllwinnertechPhoeniSuit 3. TypeC线 X2、12V电源线X1 4…

怎么恢复电脑删除的文件?4个策略恢复数据!

“不知道大家有什么方法可以恢复电脑上删除的文件吗?一不小心删除了部分文件,希望能得到大家的帮助。” 我们的电脑里会存储着很多重要的数据,包括各种重要的文件、照片、资料等。在使用电脑时,有时候可能会由于各种误操作导致它们…

PostgreSQL 多表连接不同维度聚合统计查询

摘要:在本文中,你将学习到如何使用 PostgreSQL 完全外连接,从两个或多个表中聚合维度统计数据。 文章目录 一、常用的连接类型图示二、数据库表设计示例三、连接查询示例1. inner join 内连接(不能满足维度统计需求)2. full join 完全外连接(满足维度统计需求)一、常用的…

环保空调的制冷量和耗电量是多少呢

环保空调的制冷量和耗电量因具体型号、功率以及使用情况而异。以下是一些关于环保空调制冷量和耗电量的详细解释和归纳: 制冷量 原理:环保空调主要利用水蒸发吸热的物理原理进行降温,这种降温方式能够带来显著的冷却效果。效果:…

【NLP】给Transformer降降秩,通过分层选择性降阶提高语言模型的推理能力

【NLP】给Transformer降降秩,通过分层选择性降阶提高语言模型的推理能力 文章目录 【自然语言处理-论文翻译与学习】序1、导论2、相关工作3、相关工具4、方案5、实验5.1 使用 GPT-J 对 CounterFact 数据集进行彻底分析5.1.1 数据集中的哪些事实是通过降阶恢复的&…

C++ 引用 - 引用的特点|在优化程序上的作用

引用是C 的一个别名机制,所谓别名,就是同一块内存共用多个名字,每个名字都指的是这片空间,通过这些别名都能访问到同样的一块空间。 就像鲁迅和周树人是同一个人。 ——鲁迅 一、引用的基本用法 int a 10; int& ref a; // …

磁盘管理 磁盘介绍 MBR

track:磁道,就是磁盘上同心圆,从外向里,依次1号、2号磁道..... sector:扇区,将磁盘分成一个一个扇形区域,每个扇区大小是512字节,从外向里,依次是1号扇区、2号扇区... cy…

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

基于springboot实现问卷调查系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现问卷调查系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,问卷信息因为其管理内容繁杂,管理数…

【全开源】Java AI绘画MJ绘画源码小程序APP公众号源码AI绘图

🎨 探索AI绘画的奥秘 一、引言:AI绘画的魅力 🌈 在这个数字化飞速发展的时代,AI绘画已经不再是遥不可及的梦想。通过源码小程序,我们可以轻松探索AI绘画的奥秘,感受科技与艺术的完美结合。今天&#xff0…

ubuntu18.04 配置 mid360并测试fast_lio

1.在买到Mid360之后,我们可以看到mid360延伸出来了三组线。 第一组线是电源线,包含了红色线正极,和黑色线负极。一般可以用来接9-27v的电源,推荐接12v的电源转换器,或者接14.4v的电源转换器。 第二组线是信号线&#x…

组件之间的通信方式

【 0 】前言 Vue 是一个渐进式的 JavaScript 框架,通过组件化的方式构建应用。在 Vue 中,组件通信指的是不同组件之间传递数据、共享数据或调用方法等行为。在前端开发中,子组件和父组件之间的通信是非常常见和重要的。 【 1 】父子组件通信…

SMT智能车间MES系统的实施方案

SMT行业中MES系统实施的关键特征: SMT包括上下板设备,印刷设备,贴片设备,回流焊炉,AOI。AOI的全称是自动光学检查,它基于光学原理来检测焊接生产中遇到的常见缺陷。测试设备,测试设备等MES解决…

如何用多媒体沙盘实现智能交互体验?

随着多媒体技术在内容展示领域的迅猛进步,智能化信息交互方式已然跃升为公众瞩目的焦点,而展厅作为信息传递与产品展示的核心阵地,正面临着提升交互体验、强化信息传递效果的迫切需求。因此,以多媒体沙盘、LED屏幕等创新装置为媒介…

AIGC实践|用AI制作视频短片创作全流程

前言: 在深入探讨了AI在动态有声绘本和小游戏开发的应用之后,本次我们将聚焦于视频创作领域。本篇文章将详细展示如何使用AI工具从概念构思到画面生成再到最终成片的全过程,涵盖剧本创作、分镜头设计、视觉效果生成及音乐配制等各个阶段。让…

无人机的发展

朋友们,你们知道吗?无人机的发展之路可谓是科技界的一股清流,风头正劲啊!从最初简单的遥控飞机到现在各种智能功能的加持,无人机真是越来越神奇了! 首先,无人机在航拍领域大放异彩!无…

Redis 持久化的奥秘:主线程、子进程与后台线程的区别及潜在阻塞风险

1. 主线程、子进程和后台线程的联系与区别 Redis 是一个高性能的键值数据库,以其快速的响应速度和丰富的功能集,广泛应用于各种应用场景。理解 Redis 的线程和进程模型有助于更好地优化其性能。下面,我们将详细探讨 Redis 中的主线程、子进程和后台线程的联系与区别。 进程…