爬虫相关面试题
一,如何抓取一个网站?
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的值设置为代理服务器地址就可以了
、
十 什么是分布式
分布式系统是由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的,普通的机器完成单个计算机无法完成的计算,存储任务。其目的是利用更多的机器,处理更多的数据。
分布式爬虫则是将多台主机组合起来,共同完成爬取任务,这将大大提高爬取效率。
相关文章:

爬虫相关面试题
一,如何抓取一个网站? 1,去百度和谷歌搜一下这个网站有没有分享要爬取数据的API 2, 看看电脑网页有没有所需要的数据,写代码测试调查好不好拿,如果好拿直接开始爬取 3,看看有没有电脑能打开的手机网页&a…...

Spring Cloud Netflix 之 Ribbon
前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言前言1、负载均衡1.1、服务端负载均衡1.2、客户端负载均衡 2、Ribbon实现服务…...
C语言怎样记住那么多的颜⾊?
一、问题 ⾚、橙、⻩、绿、⻘、蓝、紫,如此之多的颜⾊,数字不好记,英⽂看程序还可以, 直接写也不好写。那么怎样记住那么多的颜⾊呢? 二、解答 颜⾊枚举值如下: enum COLORS {BLACK, /*O⿊*/BLUE, …...

LabVIEW软件开发任务的工作量估算方法
在开发LabVIEW软件时,如何准确估算软件开发任务的工作量。通过需求分析、功能分解、复杂度评估和资源配置等步骤,结合常见的估算方法,如专家判断法、类比估算法和参数估算法,确保项目按时按质完成,提供项目管理和资源分…...

【已解决】引入 element 组件无法使用编译错误 ERROR Failed to compile with 1 error
如果大家使用这个vue 配合 element 框架不熟练,当你顺利按照文档安装好 vue 和 element 的时候想要使用element 的组件时候确无法展示出来,甚至报错。不妨看看是不是这个问题, 1.首先使用element 的时候,前提是把必须要的 elemen…...

Prometheus的四种指标类型
目录 一、Counter 计数器 1.1Counter 是计数器类型 1.2Counter 类型示例 二、Gauge 仪表盘 2.1Gauge是测量器类型 2.2Gauge 类型示例 三、Histogram 累积直方图 3.1Histogram 作用及特点 3.2使用 histogram 柱状图 四、Summary 摘要 一、Counter 计数器 1.1Counter …...
FastDFS SpringBoot 客户端 Demo搭建,支持文件上传下载
一、准备 fastdfs-client-java 依赖包 1、从 Git 下载 FastDFS java client SDK 源码 https://github.com/happyfish100/fastdfs-client-java.git<fastdfs-client-java 源码见附件> 2、使用ant从源码构建 ant clean package3、使用maven从源码安装 mvn clean instal…...

十大成长型思维:定位思维、商业思维、时间管理思维、学习成长思维、精力管理思维、逻辑表达思维、聚焦思维、金字塔原理、目标思维、反思思维
一、定位思维 定位思维是一种在商业和管理领域中至关重要的思维模式,它涉及到如何在顾客心智中确立品牌的独特位置,并使其与竞争对手区分开来。以下是关于定位思维的清晰介绍: 1、定义 定位思维是一种从潜在顾客的心理认知出发,通…...

GraphQL(9):Spring Boot集成Graphql简单实例
1 安装插件 我这边使用的是IDEA,需要先按照Graphql插件,步骤如下: (1)打开插件管理 在IDEA中,打开主菜单,选择 "File" -> "Settings" (或者使用快捷键 Ctrl Alt S …...

vue3+ Element-Plus 点击勾选框往input中动态添加多个tag
实现效果: template: <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …...

唯美仙侠手游【九幽仙域】win服务端+GM后台+详细教程
资源下载地址:九幽仙域搭建-...

Qt creator day2练习
使用手动连接,将登录框中的取消按钮使用第二种方式,右击转到槽,在该函数中,调用关闭函数,将登录按钮使用Qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为“admin”,密…...

哪里有海量的短视频素材,以及短视频制作教程?
在当下,短视频已成为最火爆的内容形式之一,尤其是在抖音上。但很多创作者都面临一个问题:视频素材从哪里来?怎么拍摄才能吸引更多观众?别担心,今天我将为大家推荐几个宝藏网站,确保你素材多到用…...

文章MSM_metagenomics(三):Alpha多样性分析
欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 本教程使用基于R的函数来估计微生物群落的香农指数和丰富度,使用MetaPhlAn prof…...
Web前端与其他前端:深度对比与差异性剖析
Web前端与其他前端:深度对比与差异性剖析 在快速发展的前端技术领域,Web前端无疑是其中最耀眼的明星。然而,当我们谈论前端时,是否仅仅指的是Web前端?实际上,前端技术还包括了许多其他细分领域。本文将从四…...

AI 客服定制:LangChain集成订单能力
为了提高AI客服的问题解决能力,我们引入了LangChain自定义能力,并集成了订单能力。这使得AI客服可以根据用户提出的问题,自动调用订单接口,获取订单信息,并结合文本知识库内容进行回答。这种能力的应用,使得…...

【计算机毕业设计】242基于微信小程序的外卖点餐系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
java程序监控linux服务器硬件,cpu、mem、disk等
实现 使用Oshi和Hutool工具包1、pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId>&l…...
高考报志愿闲谈
当你的朋友在选择大学和专业时寻求建议,作为一名研究生并有高考经验的人,你可以提供一些有价值的见解和建议。 兴趣与职业目标: 首先询问他对哪些工科领域感兴趣,如机械工程、电子工程、计算机科学等。探讨他的职业目标。了解他将…...

面试官考我Object类中的所有方法及场景使用?我...
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java 知识点啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯&a…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...