爬虫相关面试题

一,如何抓取一个网站?

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,一经查实,立即删除!

相关文章

Vue前端发起promise请求,若请求2分钟之内能完成就直接完成,若两分钟之后还未完成就直接路由跳转到其他页面

在Vue中,你可以使用JavaScript的Promise和setTimeout来实现这个需求。这里是一个基本的实现思路: 创建一个Promise,该Promise内部发起你的API请求(假设你使用的是axios)。同时设置一个setTimeout来在2分钟后执行一个操…

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

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

怎么不使用springboot Helper或Spring Initializr来创建spring项目

1. 创建项目目录结构 首先,创建项目的基本目录结构。一个典型的 Maven 项目结构如下: my-spring-project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └…

前端 CSS 经典:好用的 CSS 选择器

1. focus-within 当前选中元素及当前选中元素的后代元素有没有聚焦。 .focus:focus-within {background: #fff; } 2. has span 的兄弟元素 input 有自定义属性 data-required 的设置样式 .label span:has( input[data-required])::after {content: *,color: red } 3. fir…

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

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

赶紧收藏!2024 年最常见 20道并发编程面试题(十)

上一篇地址:赶紧收藏!2024 年最常见 20道并发编程面试题(九)-CSDN博客 十九、什么是不可变对象?为什么它们在并发编程中很有用? 不可变对象(Immutable Object)是指一旦创建后&…

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

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

三、树和割集

文章目录 1、树1.1 树的定义1.2 树的性质1.3 极小连通图1.4 树的中心1.5 生成树1.5.1 最小生成树 2、 割点和桥THE END 1、树 1.1 树的定义 \qquad 定义: 一个连通的无圈的图称为树。 \qquad 只有一个顶点的树叫做平凡树。 \qquad 树中度为1的节点称为叶子结点。…

蒙特卡洛估计举例

计算期望 E q ( x 1 ∣ x 0 ) [ log ⁡ p θ ( x 0 ∣ x 1 ) ] \mathbb{E}_{q(x_1|x_0)}[\log p_\theta(x_0|x_1)] Eq(x1​∣x0​)​[logpθ​(x0​∣x1​)] 需要知道分布 q ( x 1 ∣ x 0 ) q(x_1|x_0) q(x1​∣x0​) 和函数 log ⁡ p θ ( x 0 ∣ x 1 ) \log p_\theta(x_0|…

IPNV6

特征——升级点: 1、全球单播地址 ----IPV4地址下的公有地址 V6下没 nat 2、可聚合性 (IANA组织对全球的地址进行合理分配) 3、多宿主——一个物理接口可以同时拥有多个不同网段的IPV6地址;但不同接口不能在同一网段 4、自动配置 1&#xff…

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

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

Kafka内外网分流配置listeners和advertised.listeners

问题背景: Kafka部署在内网,内网Java服务会使用Kafka收发消息,另外,Java服务会与其他第三方系统使用kafka实现数据同步,也就是外网也会发送消息到kafka,外网IP做了端口映射到了内网,advertised…

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

有时候我们需要去掉一窜文本中的空格,这里分享一个好用的免费网站,可实现在线去除 网址: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表格的第一行需要有黄色背景&…

2024-06-11 Unity Shader 开发入门5 —— CG 语法

文章目录 1 CG 语法基础1.1 CG 结构1.2 数据类型1.2.1 基础数据类型1.2.2 复合数据类型1.2.3 特殊数据类型 1.3 操作符1.3.1 Swizzle 操作符1.3.2 向量/矩阵转换 1.4 运算符1.5 流程控制语句1.6 函数1.6.1 有返回值的函数1.6.2 有返回值的函数 2 顶点/片元着色器2.1 着色器结构…

ClickHouse数据库对比、适用场景与入门指南

本文全面对比了ClickHouse与其他数据库(如StarRocks、HBase、MySQL、Hive、Elasticsearch等)的性能、功能、适用场景,并提供了ClickHouse的教学入门指南,旨在帮助读者选择合适的数据库产品并快速掌握ClickHouse的使用。 文章目录 …