Python面试重点(爬虫篇)
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题
注意:第31题1分,其他题均每题3分。
- 了解哪些基于爬虫相关的模块?
requests、urllib、lxml、bs4、selenium
- 常见的数据解析方式?
re、lxml、bs4
- 列举在爬虫过程中遇到的哪些比较难的反爬机制?
参数加密、数据加密
- 简述如何抓取动态加载数据?
获取动态ip地址
向动态id发送请求
- 移动端数据如何抓取?
- 抓取过哪些类型的数据,量级多少?
- 了解哪些爬虫框架?
scrapy
- 谈谈对scrapy的了解?
- 如何解析出携带标签的局部页面数据?
- scrapy核心组件?
引擎(EGINE)、调度器(SCHEDULER)、下载器(DOWLOADER)、爬虫(SPIDERS)、项目管道(ITEM PIPLINES)、下载器中间件(Downloader Middlewares)、爬虫中间件(Spider Middlewares)
- scrapy中间件的应用?
位于Scrapy引擎和下载器之间,主要用来处理从EGINE传到DOWLOADER的请求request,已经从DOWNLOADER传到EGINE的响应response
- 如何实现全站数据爬取?
- 如何检测网站数据更新?
- 分布式爬虫实现原理?
- 如何提升爬取数据的效率(异步爬虫)
- 列举你接触的反爬机制?
ua检测、封ip、js混淆、参数加密、数据加密
- 什么是深度优先和广度优先(优劣)
- scrapy如何实现持久化存储
存文件、存数据库
- 谈谈对crawlspider的理解,如何使用其进行深度爬取
- 如何实现数据清洗?
- 了解过机器学习吗?
- 在爬虫中为什么需要是用selenium?selenium和爬虫之间的关联是什么?
- 列举你所熟知的selenium模块中的常用方法及其作用
- 解释在多任务异步协程中事件循环(loop)的作用是什么?
- 多任务异步协程是如何实现异步的?
基于aiohttp模块异步网络请求实现数据爬取及数据解析
特殊函数:如果async修饰了一个函数的定义,那么该函数就变成了一个特殊函数,
特殊之处:特殊函数被调用后函数内部实现语句不会被立即执行
该函数调用之后会返回一个协程对象
协程对象:特殊函数调用后可以返回一个协程对象
协程 == 特殊函数
任务对象:对协程对象的进一步封装,就是一个高级协程对象
任务对象 == 协程对象 == 特殊的函数
绑定回调:task.add_done_callback(parse) #parse就是一个回调函数
parse的定义:
parse必须又一个参数,该参数表示的就是回调函数对应的任务对象
task.result(): 就是特殊函数的的返回值
事件循环对象:可以让特殊函数内部的语句执行
该对象内部必须注册的是任务对象,当事件循环开启后其内部注册的任务对象就可以基于异步被执行
- 验证码如何处理?
selenium,超级鹰
- scrapy 和 scrapy-redis 有什么区别?
scrapy 是一个通用的爬虫框架,其功能比较完善,可以帮你迅速的写一个简单爬虫,并且跑起来。scrapy-redis是为了更方便地实现scrapy分布式爬取,而提供了一些以redis为基础的组件
- 说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。
1.域名解析成IP
2.与目的主机进行TCP连接(三次握手)
3.发送和接收数据
- 列出你知道 header 的内容以及信息
- 简述scrapy的去重原理?
调度器(SCHEDULER) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
- 下列叙述中错误的是:(1分)
A.栈是线性结构 B.队列是线性结构C.线性列表是线性结构 D.二叉树是线性结构
- 简述前序、中序、后续遍历?
跟左右
左跟右
左右跟
- 写代码:实现一个冒泡排序。
def sort(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] return alistalist = [3,8,5,2,0,7,6]print(sort(alist))
- 写代码:实现一个快速排序。
def sort(alist,left,right): low = left hight = right if low < high: return mid = alist[low] while low < high: while low < high: if alist[high] < mid: alist[low] = alist[high] break else: high -= 1 while low < high: if alist[low] < mid: 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
第二部分 补充题
- 列举常见用的git命令?
- 你们公司/团队用怎么做的协同开发?
- 公司如何做代码review?谁来做?
- 线上代码如果出现bug如何解决?
- git rebase的作用?
git实战视频地址:https://www.bilibili.com/video/av70772636
原文地址:https://www.cnblogs.com/Ndfour/p/12425718.html