python面试题----4

Python面试重点(爬虫篇)

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

第一部分 必答题

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

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

    requests\urllib
  2. 常见的数据解析方式?
    BS4\xpath\正则匹配\
  3. 列举在爬虫过程中遇到的哪些比较难的反爬机制?
    robots协议、UA检测、动态数据加载、代理、动态变化的请求参数、cookie、js混淆和加密
  4. 简述如何抓取动态加载数据?
    通常情况下,动态变化的请求参数的值都会被隐藏在前台页面中,
    基于抓包工具进行全局搜索(基于js逆向获取相关的数据值)
  5. 移动端数据如何抓取?
    使用fiddler进行数据抓包
  6. 抓取过哪些类型的数据,量级多少?
    古诗文 2000,企查查 20000
  7. 了解哪些爬虫框架?
    scrapy
  8. 谈谈对scrapy的了解?
    scrapy框架是一个高性能、高并发的异步框架
  9. 如何解析出携带标签的局部页面数据?
    格式: xpath('./标签/text()')
  10. scrapy核心组件?
引擎、调度器、下载器、爬虫、项目管道
  1. scrapy中间件的应用?

    作用:拦截请求和响应,修改请求头
  2. 如何实现全站数据爬取?
    使用CrawlSpider进行站的数据爬取,
         Rule(link,callback,fllow=True):规则解析器
         follow=True:将链接提取器 继续作用到 链接提取器 提取到的链接 对应的页面源码中
  3. 如何检测网站数据更新?
    将爬取过的网页的URL存储到redis等数据库中,再次爬取的时候,将获取到的url与数据库中的url对比,如果数据库中没有,继续爬取
  4. 分布式爬虫实现原理?
    运用Scrapy框架+scrapy-redis组件
    可以给原生的scrapy框架提供可以被共享的管道和调度器,修改调度器的配置,与redis数据库连接,
  5. 如何提升爬取数据的效率(异步爬虫)
    使用代理服务器, 开发分布式爬虫
  6. 列举你接触的反爬机制?
    UA检测、动态页面抓取、cookie,js加密、混淆
  7. 什么是深度优先和广度优先(优劣)
    深度优先:是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
    广度优先:系统地展开并检查图中的所有节点,以找寻结果
  8. scrapy如何实现持久化存储
    基于管道的持久化存储:
        在配置文件中开启管道机制,在管道文件中定义好持久化存储的类
  9. 谈谈对crawlspider的理解,如何使用其进行深度爬取
    scrapy genspider -t crawl 爬虫文件 域名
    
    CrawlSpider使用rules属性来决定爬虫的爬取规则,并将匹配后的url请求提交给引擎,完成后续的爬取工作。
    
    在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。
    
    深度爬取是将rules中的follow=True:将链接提取器 继续作用到 链接提取器 提取到的链接 对应的页面源码中
  10. 如何实现数据清洗?
    数据清洗的对象主要是:缺失值、异常值、重复值和噪音处理
    使用pandas对数据进行处理
  11. 了解过机器学习吗?
    运用数据训练模型,实现预测
  12. 在爬虫中为什么需要是用selenium?selenium和爬虫之间的关联是什么?
    实现一些不容易用爬虫代码爬取到的页面,模拟手动页面浏览
    selenium能用程序驱动做无头浏览器
  13. 列举你所熟知的selenium模块中的常用方法及其作用
    https://selenium-python.readthedocs.io/installation.html
  14. 解释在多任务异步协程中事件循环(loop)的作用是什么?
  15. 多任务异步协程是如何实现异步的?
    使用asyncio和aiohttp
  16. 验证码如何处理?
    使用超级鹰打码平台+动作链
  17. scrapy 和 scrapy-redis 有什么区别?
    scrapy 是一个通用的爬虫框架,其功能比较完善,可以迅速的写一个简单爬虫,并且跑起来。
    scrapy-redis是为了更方便地实现scrapy分布式爬取,而提供了一些以redis为基础的组件(注意,scrapy-redis只是一些组件,而不是一个完整的框架)
  18. 说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。
    在浏览器的地址中输入内容,浏览器发送一个get请求,服务器根据请求的内容,发送一个响应,然后,浏览器解析服务器发送回来的数据
  19. 列出你知道 header 的内容以及信息
    User-Agent:产生请求的浏览器类型
    Accept:client端可识别的内容类型列表
    Host:请求的主机名,允许多个域名同处一个ip地址,即虚拟主机 
  20. 简述scrapy的去重原理?
    1.Scrapy本身自带有一个中间件;
    2.scrapy源码中可以找到一个dupefilters.py去重器;
    3.需要将dont_filter设置为False开启去重,默认是false去重,改为True,就是没有开启去重;
    4 .对于每一个url的请求,调度器都会根据请求得相关信息加密得到一个指纹信息,并且将指纹信息和set()集合中的指纹信息进 行 比对,如果set()集合中已经存在这个数据,就不在将这个Request放入队列中;5.如果set()集合中没有存在这个加密后的数据,就将这个Request对象放入队列中,等待被调度
  21. 下列叙述中错误的是:(1分)
    A.栈是线性结构    B.队列是线性结构
    C.线性列表是线性结构 D.二叉树是线性结构    D
  22. 简述前序、中序、后续遍历?
  23. 写代码:实现一个冒泡排序。
  24. 写代码:实现一个快速排序。

第二部分 补充题

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

    # 设置提交代码时的用户信息
    git config [-global] user.name "[name]"
    git config [-global] user.email "[email address]"
    14.git rm
    $ git rm [file1] [file2] ...
    删除工作区文件,并且将这次删除放入暂存区
    15.其他
    # 列出所有本地分支$ git branch
    # 列出所有远程分支$ git branch -r
    # 列出所有本地分支和远程分支$ git branch -a
    # 新建一个分支,但依然停留在当前分支$ git branch [branch-name]
    # 新建一个分支,并切换到该分支$ git checkout -b [branch]
    # 新建一个分支,指向指定commit $ git branch [branch] [commit]
    
    # 新建一个分支,与指定的远程分支建立追踪关系
    $ git branch --track [branch] [remote-branch]
    
    # 切换到指定分支,并更新工作区$ git checkout [branch-name]
    # 切换到上一个分支$ git checkout -b
    # 建立追踪关系,在现有分支与指定的远程分支之间
    $ git branch --set-upstream [branch] [remote-branch]
    # 合并指定分支到当前分支
    $ git merge [branch]
    # 选择一个commit,合并进当前分支
    $ git cherry-pick [commit]
    # 删除分支$ git branch -d [branch-name]
    # 删除远程分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]
  2. 你们公司/团队用怎么做的协同开发?

    git

  3. 公司如何做代码review?谁来做?
  4. 线上代码如果出现bug如何解决?
    先创建一个分支,将代码调试完成后提交到创建好的分支中,然后在进行合并
  5. git rebase的作用?

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

原文地址:https://www.cnblogs.com/python111/p/12425022.html

时间: 2024-10-14 23:08:26

python面试题----4的相关文章

python 面试题1

python 面试题 - 知识点整理 分类: python面试2013-03-05 15:52 13754人阅读 评论(1) 收藏 举报 python面试题 目录(?)[+] 1. 在判断object是否是class的instances时,type和isinstance函数的区别? type(obj) => <type 'instance'> type(cls) => <type 'classobj'> 由上可知,所有obj type后统一为 instance type

python公司面试题集锦 python面试题大全

问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案 以上代码的

Python面试题 —— 获取列表中位数

中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位数.在这个任务里,你将得到一个含有自然数的非空数组(X).你必须把它分成上下两部分,找到中位数. 输入: 一个作为数组的整数(int)列表(list)的. 输出: 数组的中位数(int, float). 范例: get_median([1, 2, 3, 4, 5]) == 3 get_median(

Python面试题整理-更新中

几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路人甲的回答 如何学习Python爬虫[入门篇] - 学习编程 - 知乎专栏 Python常用库整理 - 学习编程 - 知乎专栏 学好Python的11个优秀资源 - 学习编程 - 知乎专栏 在开头依然推荐一个Python面试题整理比较好的网站:GitHub : 关于Python的面试题.同样推荐几道

python 面试题

前段时间面试碰到的一组python面试题,虽然很简单但是特别的基础. 1.Python 如何判断二维数组中是否包含整数? array = [[1, 3, 5.6, 7.2, 8, 9.9], [2.5, 4.7, 6.8, 7.3, 9, 10], [3.7, 6.7, 9.8, 9.9, 11, 12.1]] for i in array: for j in i: if str(j).isdigit(): # 判断是否是整数还可以通过isinstance(j, int) print("二维列表

17道Python面试题,分享给你以防不测!

今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷. 1.Python中pass语句的作用是什么? pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作. 2.Python是如何进行类型转换的? Python提供了将变量或值从一种类型转换成另一种类型的内置函数.比如int函数能够将符合数学格式数字型字符串转换成整数.否则,返回错误信息. 3.Python是如

python面试题总结与分析(一)

Q 1:Python 有哪些特点和优点? 作为一门编程入门语言,Python 主要有以下特点和优点: 可解释 具有动态特性 面向对象 简明简单 开源 具有强大的社区支持 当然,实际上 Python 的优点远不止如此,可以阅读该文档,详细了解: https://data-flair.training/blogs/python-tutorial/ Q 2:深拷贝和浅拷贝之间的区别是什么? 答:深拷贝就是将一个对象拷贝到另一个对象中,这意味着如果你对一个对象的拷贝做出改变时,不会影响原对象.在 Pyt

Python面试合集 史上最全面Python面试题和详解(10套) 完整版

本文件内含10个文档,文档格式为md,可以以文本的形式打开.内容如题,全面的Python面试题和详解,需要的朋友可下载试试! 包含:2019 Python最新面试题及答案16道题.110道Python面试题(上).最常见的 35 个 Python 面试题及答案(2018 版).整理的最全 python常见面试题(基本必考)等! 下载地址 https://pan.baidu.com/s/1XgpPig-KpR8ox0vWuTwVIw 如需提取码: [打开微信]->[扫描下方二维码]->[关注数据

python 面试题3

注:本面试题来源于网络. 1.python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”. 多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Array 2.Python是如何进行内存管理的? http://developer.51cto

python面试题大全

注:本面试题来源于网络,转载请注明来自http://www.cnblogs.com/goodhacker/p/3366618.html. 1. (1)python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”. 多进程间共享数据,可以使用 multiprocessing.Value 和 mult