• 爬虫找工作之面试题(1)


    #### 1.什么是爬虫并解释其概念?

    ```python
    (1)爬虫又叫网页蜘蛛,是模拟人操作客户端向服务器发起请求,抓取数据的自动化程序或脚本
    (2)说明:
    ①模拟:用爬虫程序伪装出人的行为,避免被服务器识别为爬虫程序
    ②客户端:浏览器、app都可以实现人与服务器之间的交互行为,应用客户端从服务器获取数据
    ③自动化:数据量较小可以人工获取,但往往在公司里爬取的数据量在百万条、千万条级别,所以要程序自动化获取数据
    ```

    ---

    #### 2.http协议与https协议的区别

    ```python
    1.http协议需要到ca申请证书,一般免费证书较少,因而需要一定费用
    2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
    3.http和https使用的是完全不同的连接方式,用的端口不一样,前者是80,后者是443
    4.http的连接很简单,是无状态的,https协议是有ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
    ```

    ---

    #### 3.谈谈你对tcp协议与udp协议的理解

    ```python
    (1)两者都是传输层协议
    (2)Tcp协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议,其具有以下4个特性:
    ①有序性
    ②正确性
    ③可靠性
    ④可控性
    (3)Udp协议,是用户数据协议,面向无连接的传输层协议,传输不可靠,其具有以下3个特点:
    ①无连接,数据可能丢失或损坏
    ②报文小,传输速度快
    ③吞吐量大的网络传输,可以在一定程度上承受数据丢失
    ```

    ---

    #### 4.什么是robots协议?阐述robots协议与爬虫的关系?

    ```python
    (1)Robots协议是约定哪些内容允许哪些爬虫抓取
    (2)通用爬虫需遵守robots协议,而我们写的聚焦爬虫则不需要遵守
    ```

    ---

    #### 5.默认端口信息:

    ```python
    (1)Mysql:3306
    (2)ssh:22
    (3)MongoDB:27017
    (4)Redis:6379
    (5)https:443
    (6)http:80
    ```

    ---

    ##### 6.Requests模块发送get请求的参数:

    ```python
    (1)Url
    (2)Headers
    (3)Params
    (4)Proxies
    proxy
    proxies
    ```

    ---

    #### 7.Requests模块发送post请求的参数:

    ```python
    (1)Url
    (2)Headers
    (3)Data
    (4)Proxies
    ```

    ---

    ##### 8.简述聚焦爬虫的设计思路

    ```python
    (1)确定url,模拟浏览器向服务器发送请求
    (2)获取响应数据并进行数据解析
    (3)将目标数据持久化到本地
    ```

    ---

    ##### 9.简述爬虫的分类及各类爬虫的概念

    ```python
    (1)通用爬虫:爬取网页数据,为搜索引擎提供检索服务
    (2)聚焦爬虫:针对某一领域爬取特定数据的爬虫
    ```

    ---

    #### 10.请写出8中常用的请求方法

    ```python
    (1)Get
    (2)Post
    (3)Put
    (4)Delete
    (5)Trace
    (6)Head
    (7)Connect
    (8)Options
    ```

    ---

    #### 11.列举反爬虫机制(至少8种)

    ```python
    (1)UA检测
    (2)Robots协议
    (3)验证码
    (4)IP封禁
    (5)账号封禁
    (6)动态数据加载
    (7)Js数据加密
    (8)隐藏参数
    (9)字体反爬
    ```

    ---

    #### 12Requests发送请求时携带headers参数及作用(至少写3点)

    ```python
    UserAgent:实现UA伪装
    Cookie:模拟登陆
    Accept:接受数据类型
    ```

    ---

    #### 13请列举三个可以实现网页请求的库

    ```python
    (1)Requests
    (2)Urllib
    (3)Aiohttp
    ```

    ---

    #### 14.简述html、css、JavaScript的作用

    ```python
    (1)Html:定义网页骨架
    (2)Css:定义网页样式
    (3)JavaScript:定义网页行为
    ```

    ---

    #### 15.针对requests请求的响应对象,如何获取其文本形式,二进制形式及json数据

    ```python
    (1)Res.text:获取html源码
    (2)Res.content:获取二进制流,多用于图片、视频下载等
    (3)Res.json():获取json数据,多用ajax请求
    ```

    ---

    #### 16.请列举三种数据持久化的方式

    ```python
    (1)Csv
    (2)Json
    (3)Mysql
    (4)Mongodb
    (5)Redis
    ```

    ---

    ### B:

    #### 17.正则表达式中(.*)和(.*?)匹配区别

    ```python
    (1)(.*):贪婪匹配,尽可能多的匹配
    (2)(.*?):非贪婪匹配,尽可能少的匹配
    ```

    ---

    #### 18.Re模块常用的三个匹配方法,并简述其特点

    ```python
    (1)re.findall():以列表形式返回所有满足条件的对象
    (2)re.search():匹配到第一个就返回一个对象,用group()取值,匹配不到返回None
    (3)re.match():从字符串开头匹配,匹配返回一个对象,用group()取值,匹配不到返回None
    ```

    ---

    #### 19请简述单属性多值匹配,多属性匹配概念及使用到的函数或关键字

    ```python
    (1)单属性多值匹配:根据节点某属性包含的某个值进行定位,使用contains函数
    (2)多属性匹配:根据节点的多个属性,共同定位该节点,使用关键字and
    ```

    ---

    #### 20.请列举爬虫中解析数据的模块(至少三种)

    ```python
    (1)Lxml
    (2)Bs4
    (3)Pyquery
    ```

    ---

    #### 21.Cookie和session的区别

    ```python
    (1)数据存储位置不同,cookie存在客户端,session存在服务器
    (2)安全程度不同,cookie存客户端本地,分析cookie,实现cookie欺骗,考虑到安全性,所以用session
    (3)性能不同,session存服务器,访问 量大时,会增加服务器负载,考虑到性能,所以用cookie
    (4)数据存储大小不同,单个cookie不超过4k,部分浏览器会限制cookie的存储个数,但session存在服务器,故不受客户端浏览器限制
    ```

    ---

    #### 22.Xpath如何定位节点的基本语法(至少写三点)

    ```python
    (1)根据节点名定位:nodename
    (2)根据节点属性定位:nodename[@attribute=”value”]
    (3)从当前节点的根节点向下匹配:./
    (4)从当前节点的任意位置向下匹配:.//
    ```

    ---

    #### 23.请描述xpath表达式中的./div[@id=”name”]和.//div[@id=”name”]的含义

    ```python
    (1)从当前节点的根节点向下匹配,匹配一个div标签,该div标签的id属性值是“name”
    (2)从当前节点的任意位置向下匹配,匹配一个div标签,该div标签的id属性值是“name”
    ```

    ---

    #### 24.请写出xpath表达式中的/text()与//text()的区别

    ```python
    (1)/text():获取已定位节点的直接子文本
    (2)//text():获取已定节点的子孙节点文本
    ```

    ---

    #### 25.请写出tcp/udp协议,ip协议,arp协议,http/https协议及ftp协议分别位于tcp/ip五层模型的哪一层

    ```python
    (1)TCP/UDP协议:传输层
    (2)IP:网络层
    (3)ARP协议:数据链路层
    (4)HTTP/HTTPS:应用层
    (5)FTP协议:应用层
    ```

    ---

    #### 26.请画出tcp/ip五层模型

    ```python
    (1)应用层
    (2)传输层
    (3)网络层
    (4)数据链路层
    (5)物理层
    ```
    1、应用层:针对你特定应用的协议
    2、表示层:设备固定的数据格式和网络标准数据格式之间的转化
    3、会话层:通信管理,负责建立和单开通信连接,管理传输层 以下分层
    4、传输层:管理两个节点之间的数据传递。负责可靠传输
    5、网络层:地址管理和路由选择
    6、数据链路层:互联设备之间传送和识别数据帧
    7、物理层:界定连接器和网线之间的规格


    ---

    #### 27.请写出ftp协议,ssh协议、mysql、MongoDB、redis等协议或软件的默认端口号

    ```python
    (1)ftp:21
    (2)Ssh:22
    (3)Mysql:3306
    (4)Mongodb:27017
    (5)Redis:6379
    ```

    ---

    #### 28.请列举三个第三方提取数据的Python库

    ```python
    (1)lxml
    (2)BS4
    (3)pyquery
    ```

    ---

    #### 29.Beautifulsoup使用步骤

    ```python
    from bs4 import BeautifulSoup
    Soup=BeautifulSoup(res.text,’lxml’)
    Soup.select(‘css选择器’)
    ```

    ---

    #### 30.请简述bs4中get_text()和string的区别

    ```python
    (1)String:获取节点的直接子文本
    (2)get_text():获取节点下子孙节点文本
    ```

    #### 32.Bs4对定位到的标签如何获取其直接文本,子孙节点文本和属性

    ```python
    (1)直接子文本:string
    (2)子孙节点文本:get_text()
    (3)属性:tag[“attribute”]
    ```

    ---

    #### 33.请列举至少四种selenium的交互操作

    ```python
    (1)Clear()
    (2)Click()
    (3)Send_keys()
    (4)Double_click()
    ```

    ---

    #### 34列举selenium至少四种定位页面元素的方式

    ```python
    (1)Find_element_by_name
    (2)Find_element_by_id
    (3)Find_element_by_xpath
    (4)Find_element_css_selector
    ```

    ---

    #### 35.假如实例化的浏览器对象名为broswer,请写出该对象打开百度首页的代码以及获取百度首页源码的代码

    ```python
    From selenium import webdriver
    Borwser = webdriver.chrome(“dirverpath”)
    Borwser.get(“http://www.baidu.com”)
    Html = browser.page_source
    ```

    #### 36.请写出mongodb数据的相关命令

    ```python
    创建并使用集合:use xxx
    查看当前工作的集合:db
    查看所有非空集合:showdbs
    查看当前集合的所有数据:db.table.find()
    ```

    ---

    #### 37.请列举三种关系型数据库与两种菲关系型数据库

    ```python
    (1)关系型数据库:Mysql、orcale、sql_server
    (2)非关系数据库:redis、mongodb
    ```

    ---

    ### C:

    #### 38.Mongodb数据库的优点

    ```python
    (1)模式自由,面向集合存储,项目增删字段不影响程序运行
    (2)具有丰富的查询表达式,支持动态查询,以满足项目的数据查询需求
    (3)良好的索引支持,文档内嵌对象和数组,均可创建索引
    (4)支持二进制数据存储,可以将图片视频等文件转换为二进制流存储起来
    (5)以内存映射为存储引擎,大幅度提升性能
    ```

    ---

    #### 39.简述什么是i/o密集型和计算密集型

    ```python
    (1).Io密集型是指程序运行时,大部分状况是CPU在等待i/o,即磁盘读写,其特点是程序达到性能极限时,CPU占用率依然很低,涉及到网络,磁盘ID的任务都是io密集型
    (2).计算密集型,又称CPU密集型,即程序运行过程中,IO操作很短时间内完成,而CPU占用很大,有许多运算要处理,其特点是要进行大量的运算,消耗CPU资源
    ```

    ---

    #### 40.简述scrapy五大核心组件及作用

    ```python
    (1)引擎:负责各个组件之间的通讯信号及数据的传递
    (2)爬虫:定义了爬取行为和解析规则,提交item并传给管道
    (3)调度器:接受引擎传递的request,并整理排列,然后进行请求的调度
    (4)下载器:负责下载request,提交响应给引擎,引擎传递给spider
    (5)管道:负责处理spider传递来的item,如去重、持久化存储等
    ```

    ---

    #### 41.Scrapy框架有哪些优点

    ```python
    (1)框架封装的组件丰富,适用于开发大规模的抓取项目
    (2)框架基于Twisted异步框架,异步处理请求,更快捷,更高效
    (3)拥有强大的社区支持,拥有丰富的插件来扩展其功能
    ```

    ---

    #### 42.如何判断scrapy管道类是否需要return item

    ```python
    在scrapy框架中,可以自定义多个管道类,以满足不同的数据持久化需求,当定义多管理类时,多个管道需传递item来进行存储,管道类各有自己的权重,权重越小,我们认为越接近引擎,越先接受引擎传递来的item进行存储,故欲使权重大的管道能够接受到item,前一个管道必须returnitem,如果一个管道类后无其他管道类,该管道则无需return item
    ```

    ---

    #### 43.请问为什么下载器返回的相应数据不是直接通过引擎传递给管道,而是传递给spider

    ```python
    由于在scrapy中,spider不但定义了爬取的行为,还定义了数据解析规则,所以响应数据需传递给spider进行数据解析后,才能将目标数据传递给管道,进行持久化存储
    ```

    ---

    #### 44简述详情页爬取的思路

    ```python
    (1).访问列表页
    (2).从列表页的响应数据中获取详情页url
    (3).请求详情页url,使用scrapy.request手动发送请求并指定回调
    (4).解析数据在回调中获取目标数据
    ```

    ---

    ##### 45.Scrapy框架中间件的分类及其作用

    ```python
    (1)下载中间件:拦截请求与响应,用于篡改响应
    (2)爬虫中间件:除下载中间件的作用以外,还可以实现item丢弃
    ```

    ---

    #### 46.Scrapy框架下载中间件的核心方法及其作用

    ```python
    (1)Process_request:拦截非异常请求
    (2)Process_response:拦截所有响应
    (3)Process_exception:拦截异常请求
    ```

    ---

    #### 47.动态数据加载的两种情况及相应的解决方案

    ```python
    (1)ajax请求方案:如果url有规律,直接构建url实现请求,如果url无规律,则用selenium
    (2)Js动态数据加载方案:可以采用scrapy框架与selenium框架对接,实现动态数据加载
    ```

    ---

    #### 48.请写出selenium的常用节点交互操作(至少5条)

    ```python
    (1)Clear():清空
    (2)send_keys():输入
    (3)Click():点击
    (4)Quit():退出
    (5)double_click():双击
    ```

    ---

    #### 49.简述pipeline的核心方法及各方法实现什么功能

    ```python
    (1)From_crawler:它是一个类方法,用@classmethod装饰,用于获取项目的配置
    (2)Open_spider:在爬虫开启时被调用,可在其中连接数据库
    (3)process_item:在该方法中实现与数据库的交互,存储数据
    (4)close_spider:在爬虫关闭时调用,可在其中关闭数据库连接
    ```

    ---

    #### 50列举三种常用的网络数据爬取的模块或框架

    ```python
    (1)Requests
    (2)Scrapy
    (3)Urllib
    (4)Aiohttp
    (5)Pyspider
    ```

  • 相关阅读:
    20155307 2017-2018-2 《Java程序设计》第2周学习总结
    20155307刘浩——预备作业03: 安装虚拟机
    刘浩(专业打劫三十年)20155307的预备作业02:
    刘浩的预备作业01:我期望的师生关系——————不要问我为什么我叫专业打劫三十年
    List Leaves
    树的同构
    Pop Sequence
    Reversing Linked List
    一元多项式的乘法与加法运算
    Python 基础语法复习
  • 原文地址:https://www.cnblogs.com/ngngng/p/13771058.html
Copyright © 2020-2023  润新知