爬虫相关面试题

一,如何抓取一个网站?

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.mzph.cn/bicheng/28511.shtml

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

相关文章

面向对象初级的内存分布图

1.一个对象的内存图 2.二个对象的内存图 3.二个引用指向同一个对象 4.this的内存布局图 创建了一个Student类的对象s1,因为有new,所有在堆区开辟了一些内存空间,比如把这些内存空间的地址值叫001 形参name是竹小玲, 也就是对象s调用method方法的地址值, this表示方法调用者的地…

Shell 学习笔记 - 导读 + 变量定义

初识 Shell 本章学习目标 了解什么是 Shell了解 Shell 的版本及用途掌握 Shell 变量的用法 导读( 了解 \color{cyan}{了解} 了解) 现在的人们使用的操作系统(Windows、Android、iOS 等)都带有图形化界面,简单直观&…

网络安全 - DDoS 攻击原理 + 实验

DDoS 攻击 什么是 DDoS 进攻 D D o S \color{cyan}{DDoS} DDoS(Distributed Denial of Service,分布式拒绝服务)攻击是一种通过多个计算机系统同时向目标系统发送大量请求,消耗其资源,使其无法正常服务的攻击方式。DD…

举例说明 如何判断Spark作业的瓶颈

首先看哪个Job执行时间长: 例如下图中明显Job 2时间执行最长,这个对rdd作业是直观有效的。 对于sql作业可能不准确,sql需要关注stage的详情耗时。 然后看执行时间长的Job中哪个stage执行时间长: 明显stage 7和stage 13执行时间长&…

经验分享,如何去除文本中的空格

有时候我们需要去掉一窜文本中的空格,这里分享一个好用的免费网站,可实现在线去除 网址:http://www.txttool.com/t/?idMzM4 使用截图:

CloudFlare 里如何设置参数传递的 301 重定向

自从接到【哈哈,笑死我了都,黔驴技穷了都!】一文里提到的代维客户订单,这两天明月就一直在加班加点的重新部署着客户的四个服务器,因为有三个都是 WordPress+WooCommerce 式的电商平台,很是有些费时费力,好在现在基本都搞定了,剩下的就是些细节方面的优化、调整了。期间…

力扣231. 2 的幂(位运算)

Problem: 231. 2 的幂 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.若为0和负数则直接返回false; 2.利用一个标志数mask令其为一,不断的算术左移同时和n做与(&)运算,统计n中二进制位为1的个数&a…

HTTP-代理

HTTP-代理 web代理服务器是网络的中间实体,代理位于客户端和服务器之间,扮演者中间人的角色,在各端点之间来回传递http报文 web的中间实体 web上的代理服务器是代表客户端完成事务处理的中间人,如果没有web代理,htt…

(4)SDL渲染开发

SDL渲染开发 1. SDL简介2. 环境搭建2.1 windows2.2 Linux 3. SDL子系统3.1 eg1 创建窗口 4:SDL显示4.1 显示图片4.2 绘制长方形显示 5. SDL事件6. SDL多线程6.1 接口演示6.2 yuv显示6.3 pcm播放 1. SDL简介 SDL(Simple DirectMedia Layer)是一…

导出excle表

文章目录 导出excle表需求场景引入依赖具体代码 导出excle表 需求场景 假设我们有一个需求,现在数据库中有一些用户信息,我们想要把这些信息导出到excle表格中,然后存储到本地磁盘中。要求:excle表格的第一行需要有黄色背景&…

2千泰中英泰语词汇对照含MP3真人读音

越来越多的人到泰国旅游,今天这一份数据就是服务于此,包含了2000条泰语的日常生活词汇,并且每条记录都含有真人发音MP3对应。 有分100个章节,每个章节共有20条记录,非常适合一章节一章节的学习,具体章节有&…

《大数据分析》期末考试整理

一、单项选择题(1*9) 1.大数据发展历程:出现阶段、热门阶段和应用阶段 P2 2.大数据影响 P3 1)大数据对科学活动的影响 2)大数据对思维方式的影响 3)大数据对社会发展的影响 4)大数…

C语言适不适合新手学习?

C 语言,尽管从整体上看相对较为简单,但在实际编写 C 程序的过程中,会涉及到诸如指针等一些细节方面,这确实可能会给新手带来一定程度的困扰和挑战。不过,我们需要明确的是,这种挑战从某种意义上来说是具有积…

paddleocr实验过程

切割数据 Paddleocr/PPOCRLabel/gen_ocr_train_val_test.py;切割后的数据在train_data中,注意切割后的数据前缀默认是当前目录,因此建议切割数据在liunx中进行。建议在liunx中指定 python gen_ocr_train_val_test.py --datasetRootPathXX …

锁存器的工作原理及其在FPGA设计中的注意事项

锁存器(Latch)是数字电子中常用的一种基本元件,用于在特定的时间点或条件下“锁存”或保存输入的数据值。锁存器对脉冲电平敏感,它只在输入脉冲的高电平(或低电平)期间对输入信号敏感并改变状态。在数字电路…

vba学习系列(5)--指定区域指定字符串计数

系列文章目录 文章目录 系列文章目录前言一、需求背景二、vba自定义函数1.引入库 总结 前言 一、需求背景 想知道所有客诉项目里面什么项目最多,出现过多少次。 二、vba自定义函数 1.引入库 引用: CountCharInRange(区域,“字符串”) Function CountCh…

人有时候不逼自己一把,永远不知道自己有多牛逼!

大家好,我是墨云,一位看起来不像搞技术的IT男。 之前写过一篇文章,从零开始,如何在3个月内吸引3500用户:我的私域运营秘诀,现如今,我们的私域社群成员数已逾五千人。👫 今天的主题&a…

【漏洞复现】红海云eHR PtFjk.mob 任意文件上传漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

【图解IO与Netty系列】Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制

Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制 Netty编解码器编码器解码器编解码器Netty提供的现成编解码器 TCP粘包拆包问题处理Netty心跳检测机制 Netty编解码器 网络传输是以字节流的形式传输的,而我们的应用程序一般不会直接对字节流进行处理&#x…

System-Verilog 实现DE2-115 流水灯

文章目录 一、什么是SystemVerilog二、代码实现实现结果 一、什么是SystemVerilog SystemVerilog是一种硬件描述语言(HDL),它用于设计和验证电子系统,特别是在集成电路(IC)和系统级芯片(SoC)的设计过程中。SystemVerilog是Verilog语言的一个超集&#xf…