Python面试重点(爬虫篇)

Posted ndfour

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面试重点(爬虫篇)相关的知识,希望对你有一定的参考价值。

Python面试重点(爬虫篇)

注意:只有必答题部分计算分值,补充题不计算分值。

第一部分 必答题

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

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

    requests、urllib、lxml、bs4、selenium

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

    re、lxml、bs4

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

    参数加密、数据加密

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

    获取动态ip地址

    向动态id发送请求

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

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

  7. 了解哪些爬虫框架?

    scrapy

  8. 谈谈对scrapy的了解?

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

  10. scrapy核心组件?

    引擎(EGINE)调度器(SCHEDULER)下载器(DOWLOADER)爬虫(SPIDERS)项目管道(ITEM PIPLINES)下载器中间件(Downloader Middlewares)爬虫中间件(Spider Middlewares)

  11. scrapy中间件的应用?

    位于Scrapy引擎和下载器之间,主要用来处理从EGINE传到DOWLOADER的请求request,已经从DOWNLOADER传到EGINE的响应response

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

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

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

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

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

    ua检测、封ip、js混淆、参数加密、数据加密

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

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

    存文件、存数据库

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

  20. 如何实现数据清洗?

  21. 了解过机器学习吗?

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

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

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

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

    基于aiohttp模块异步网络请求实现数据爬取及数据解析

    特殊函数:如果async修饰了一个函数的定义,那么该函数就变成了一个特殊函数,

        特殊之处:特殊函数被调用后函数内部实现语句不会被立即执行 

        该函数调用之后会返回一个协程对象   

    协程对象:特殊函数调用后可以返回一个协程对象

        协程 == 特殊函数

      任务对象:对协程对象的进一步封装,就是一个高级协程对象

        任务对象 == 协程对象 == 特殊的函数

        绑定回调:task.add_done_callback(parse) #parse就是一个回调函数

          parse的定义:

            parse必须又一个参数,该参数表示的就是回调函数对应的任务对象

            task.result(): 就是特殊函数的的返回值

    事件循环对象:可以让特殊函数内部的语句执行

        该对象内部必须注册的是任务对象,当事件循环开启后其内部注册的任务对象就可以基于异步被执行

  26. 验证码如何处理?

    selenium,超级鹰

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

    scrapy 是一个通用的爬虫框架,其功能比较完善,可以帮你迅速的写一个简单爬虫,并且跑起来。scrapy-redis是为了更方便地实现scrapy分布式爬取,而提供了一些以redis为基础的组件

  28. 说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。

    1.域名解析成IP

    2.与目的主机进行TCP连接(三次握手)

    3.发送和接收数据

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

  30. 简述scrapy的去重原理?

    调度器(SCHEDULER) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

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

    A.栈是线性结构    B.队列是线性结构
    C.线性列表是线性结构 D.二叉树是线性结构
  32. 简述前序、中序、后续遍历?

    跟左右

    左跟右

    左右跟

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

    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))

     

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

    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

     

第二部分 补充题

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

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

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

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

  5. git rebase的作用?

git实战视频地址:https://www.bilibili.com/video/av70772636

 

以上是关于Python面试重点(爬虫篇)的主要内容,如果未能解决你的问题,请参考以下文章

网络爬虫实例代码优化 面试重点

Python面试重点(基础篇)

Python面试重点(进阶篇)

python面试题----4

Python面试重点(进阶篇)

Python面试重点(web篇)