zoukankan      html  css  js  c++  java
  • 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,说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。

    1.域名解析成IP
    
    2.与目的主机进行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,写代码:实现一个冒泡排序。

    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

     

  • 相关阅读:
    Java初学者:for循环介绍
    Java初学者:条件判断及其语句
    Java初学者:基本数据类型的强制类型转换
    eclipse+gradle+nodejs搭建web开发环境
    桑基图(sankey)
    tomcat性能优化
    数据库概览与选择
    在linux上装 postgresql 在 windows或 linux 连不上的问题的解决方法
    mosquitto的TLS功能测试,客户端使用paho.mqtt.golang(附JAVA版客户端实现)
    两步使用arm-linux-androideabi-addr2line定位JNI动态库中C代码错误位置
  • 原文地址:https://www.cnblogs.com/linglichong/p/12425560.html
Copyright © 2011-2022 走看看