Python有哪些高频的面试题(python,编程语言)

时间:2024-05-06 00:10:24 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    Python%E6%9C%89%E5%93%AA%E4%BA%9B%E9%AB%98%E9%A2%91%E7%9A%84%E9%9D%A2%E8%AF%95%E9%A2%98

一. 简述一下scrapy的基本流程?

scrapy分为9个步骤:

Spiders需要初始的start_url或则函数stsrt_requests,会在内部生成Requests给Engine;

Engine将requests发送给Scheduler;

Engine从Scheduler那获取requests,交给Download下载;

在交给Dowmload过程中会经过Downloader Middlewares(经过process_request函数);

Dowmloader下载页面后生成一个response,这个response会传给Engine,这个过程中又经过了Downloader Middlerwares(经过process_request函数),在传送中出错的话经过process_exception函数;

Engine将从Downloader那传送过来的response发送给Spiders处理,这个过程经过Spiders Middlerwares(经过process_spider_input函数);

Spiders处理这个response,返回Requests或者Item两个类型,传给Engine,这个过程又经过Spiders Middlewares(经过porcess_spider_output函数);

Engine接收返回的信息,如果使Item,将它传给Items Pipeline中;如果是Requests,将它传给Scheduler,继续爬虫;

重复第三步,直至没有任何需要爬取的数据

二. python3.5语言中enumerate的意思是

对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

enumerate多用于在for循环中得到计数

三. 你是否了解谷歌的无头浏览器?

无头浏览器即headless browser,是一种没有界面的浏览器。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。

Python中selenium模块中的PhantomJS即为无界面浏览器(无头浏览器):是基于QtWebkit的无头浏览器。

四. scrapy和scrapy-redis的区别?

scrapy是一个爬虫通用框架,但不支持分布式,scrapy-redis是为了更方便的实现scrapy分布式爬虫,而提供了一些以redis为基础的组件

为什么会选择redis数据库?

因为redis支持主从同步,而且数据都是缓存在内存中,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高

什么是主从同步?

在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器首先需要执行同步操作,也即是,将从服务器的数据库状态更新至主服务器当前所处的数据库状态

五. scrapy的优缺点?为什么要选择scrapy框架?

优点:

采取可读性更强的xpath代替正则 强大的统计和log系统 同时在不同的url上爬行 支持shell方式,方便独立调试 写middleware,方便写一些统一的过滤器 通过管道的方式存入数据库

缺点:

基于python爬虫框架,扩展性比较差,基于twisted框架,运行中exception是不会干掉reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉

六. scrapy和requests的使用情况?

requests 是 polling 方式的,会被网络阻塞,不适合爬取大量数据

scapy 底层是异步框架 twisted ,并发是最大优势

七. 描述一下scrapy框架的运行机制?

从start_urls里面获取第一批url发送请求,请求由请求引擎给调度器入请求对列,获取完毕后,调度器将请求对列交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理,如果提取出需要的数据,则交给管道处理,如果提取出url,则继续执行之前的步骤,直到多列里没有请求,程序结束。

八. 写爬虫使用多进程好,还是用多线程好?

IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,而开启多线程能在线程A等待时,自动切换到线程B,可以不浪费CPU的资源,从而能提升程序执行效率)。在实际的数据采集过程中,既考虑网速和响应的问题,也需要考虑自身机器的硬件情况,来设置多进程或多线程

九. 常见的反爬虫和应对方法?

基于用户行为,同一个ip段时间多次访问同一页面 利用代理ip,构建ip池

请求头里的user-agent 构建user-agent池(操作系统、浏览器不同,模拟不同用户)

动态加载(抓到的数据和浏览器显示的不一样),js渲染 模拟ajax请求,返回json形式的数据

selenium / webdriver 模拟浏览器加载

对抓到的数据进行分析

加密参数字段 会话跟踪【cookie】 防盗链设置【Referer

十. 分布式爬虫主要解决什么问题?

面对海量待抓取网页,只有采用分布式架构,才有可能在较短时间内完成一轮抓取工作。

它的开发效率是比较快而且简单的。

本文:Python有哪些高频的面试题的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python爬虫数据举例分析下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18