Python面试重点(爬虫篇)
Posted ndfour
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 alist
alist = [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
以上是关于Python面试重点(爬虫篇)的主要内容,如果未能解决你的问题,请参考以下文章