python爬虫面试题及答案-Python面试题爬虫篇(附答案)

第一部分 必答题

注意:第31题1分,其他题均每题3分。

1,了解哪些基于爬虫相关的模块?

-网络请求:urllib,requests,aiohttp-数据解析:re,xpath,bs4,pyquery-selenium- js逆向:pyexcJs

2,常见的数据解析方式?

- re、lxml、bs4

3,列举在爬虫过程中遇到的哪些比较难的反爬机制?

-动态加载的数据-动态变化的请求参数-js加密-代理- cookie

4,简述如何抓取动态加载数据?

-基于抓包工具进行全局搜索- 如果动态加载的数据是密文,则全局搜索是搜索不到

5,移动端数据如何抓取?

- fiddler,appnium,网络配置

6,抓取过哪些类型的数据,量级多少?

-电商,医疗器械,彩妆,新闻资讯,金融,体育赛事(参考hao123网站)-量级:- 最好不要超过100w。自己计算(页数,一页显示多少数据)

7,了解哪些爬虫框架?

- scrapy,pyspider

8,谈谈对scrapy的了解?

-功能:数据解析,持久化存储,深度爬取,分布式,关键件- 五大核心组件的作用和工作流程

9,如何解析出携带标签的局部页面数据?

- bs4

10,scrapy核心组件?

- spider,引擎,调度器,下载器,管道

11,scrapy中间件的应用?

-作用:拦截请求和响应- 拦截请求:设置代理

12,如何实现全站数据爬取?

- 基于手动请求发送+递归解析- 基于CrwalSpider(LinkExtractor,Rule)

13,如何检测网站数据更新?

- 增量式爬虫

14,分布式爬虫实现原理?

- 基于scrapy-redis实现的分布式。

15,如何提升爬取数据的效率(异步爬虫)

-使用框架-线程池,多任务的异步协程- 分布式

16,列举你接触的反爬机制?

ua检测、封ip、js混淆、参数加密、数据加密,动态加载

17,什么是深度优先和广度优先(优劣)

-默认情况下scrapy是深度优先。-深度优先:占用空间大,但是运行速度快- 广度优先:占用空间少,运行速度慢

18,scrapy如何实现持久化存储

-解析数据-将解析的数据封装到item中-将item提交管道-在管道中持久化存储- 开启管道

19,谈谈对crawlspider的理解,如何使用其进行深度爬取

- 链接提取器&规则解析器

20,如何实现数据清洗?

-清洗空值(缺失值)-将空对应的行数据删除.dropna-使用近邻值填充空值.fillna-清洗重复值-重复的行数据删除:drop_duplicates()-清洗异常值- 一定要有一个判定异常值的条件

21,了解过机器学习吗?

-特征工程-特征预处理-归一化,标准化-特征值化-将非数值型的数据转换成数值型的数据-降维-sklean框架-线性回归,KNN,贝叶斯-补充:1.树模型:决策树2.集成模型:随机森林-深度学习框架:- tensorflow

22,在爬虫中为什么需要是用selenium?selenium和爬虫之间的关联么?

selenium和爬虫之间的关联是什么?-爬取动态加载的数据- 模拟登录

23,列举你所熟知的selenium模块中的常用方法及其作用

24,解释在多任务异步协程中事件循环(loop)的作用是什么?

- 可以将注册在其内部的任务对象表示的特定操作进行异步执行

25,多任务异步协程是如何实现异步的?

-一个任务对象就是一个协程也是一组特定的操作,将任务对象注册到事件循环中,就可以异步的执行每一组特定的操作- wait方法,await关键字

26,验证码如何处理?

- 打码平台

27,scrapy 和 scrapy-redis 有什么区别?

- scrapy-redis这个组件可以给scrapy框架提供共享的管道和调度器实现分布式爬虫

28,说一说打开浏览器访问

1.域名解析成IP2.与目的主机进行TCP连接(三次握手)3.发送和接收数据

29,列出你知道 header 的内容以及信息

- User-Agent- Connection

30,简述scrapy的去重原理?

需要将dont_filter设置为False开启去重,默认是False;

对于每一个url的请求,调度器都会根据请求的相关信息加密得到一个指纹信息,并且将指纹信息和set()集合中得指纹信息进行比对,如果set()集合中已经存在这个数据,就不在将这个Request放入队列中。如果set()集合中没有,就将这个Request对象放入队列中,等待被调度。

31,下列叙述中错误的是:(1分)

A.栈是线性结构B.队列是线性结构

C.线性列表是线性结构D.二叉树是线性结构

32,简述前序、中序、后续遍历?

跟左右

左跟右

左右跟

33,写代码:实现一个冒泡排序。

defsort(alist):

length=len(alist)for j in range(length-1)for i in range(length-1-j):if alist[i] > alist[i+1]:

alist[i],alist[i+1] = alist[i+1],alist[i]returnalist

alist= [3,8,5,2,0,7,6]print(sort(alist))

34,写代码:实现一个快速排序。

defsort(alist,left,right):

low=left

hight=rightif low

alist[low]=alist[high]break

else:

high-= 1

while low

low+= 1

else:

alist[high]=alist[low]break

if low ==high:

alist[low]=mid

sort(alist,left,low-1)

sort(alist,high+1,right)return alist

第二部分 补充题

1,列举常见用的git命令?

2,你们公司/团队用怎么做的协同开发?

3,公司如何做代码review?谁来做?

4,线上代码如果出现bug如何解决?

5,git rebase的作用?

你可能感兴趣的:(python爬虫面试题及答案-Python面试题爬虫篇(附答案))