广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Python技术 > 正文

20道​Python高频面试题_惠州Python培训

作者:邓华发布时间:2020-12-03分类:Python技术浏览:1275


导读:惠州北大青鸟就业老师分享的20道​Python高频面试题,赶紧来收藏!

惠州北大青鸟就业老师分享的20道Python高频面试题,赶紧来收藏!


1列举网络爬虫所用到的网络数据包,解析包?

网络数据包 urllib、urllib2、requests

解析包 re、xpath、beautiful soup、lxml


urllib 和 urllib2 的区别?

urllib 和urllib2都是接受URL请求的相关模块,但是urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。urllib不可以伪装你的User-Agent字符串。

urllib提供urlencode()方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。




3 简述一下爬虫的步骤?

确定需求;

确定资源;

通过url获取网站的返回数据;

定位数据;

存储数据。


4 常见的HTTP方法有哪些?

GET:请求指定的页面信息,返回实体主体;

HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于捕获报头;

POST:向指定资源提交数据进行处理请求(比如表单提交或者上传文件),。数据被包含在请求体中。

PUT:从客户端向服务端传送数据取代指定的文档的内容;

DELETE:请求删除指定的页面;

CONNNECT:HTTP1.1协议中预留给能够将连接方式改为管道方式的代理服务器;

OPTIONS:允许客户端查看服务器的性能;
TRACE:回显服务器的请求,主要用于测试或者诊断。


5遇到反爬机制怎么处理?

反爬机制:

headers方向
判断User-Agent、判断Referer、判断Cookie。
将浏览器的headers信息全部添加进去
注意:Accept-Encoding;gzip,deflate需要注释掉


6 说一说redis-scrapy中redis的作用?

它是将scrapy框架中Scheduler替换为redis数据库,实现队列管理共享。

优点:

可以充分利用多台机器的带宽;

可以充分利用多台机器的IP地址。


7 遇到的反爬虫策略以及解决方法?

通过headers反爬虫:自定义headers,添加网页中的headers数据。

基于用户行为的反爬虫(封IP):可以使用多个代理IP爬取或者将爬取的频率降低。

动态网页反爬虫(JS或者Ajax请求数据):动态网页可以使用 selenium + phantomjs 抓取。

对部分数据加密处理(数据乱码):找到加密方法进行逆向推理。


8 如果让你来防范网站爬虫,你应该怎么来提高爬取的难度 ?

判断headers的User-Agent;

检测同一个IP的访问频率;

数据通过Ajax获取;

爬取行为是对页面的源文件爬取,如果要爬取静态网页的html代码,可以使用jquery去模仿写html。


9 简述一下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,继续爬虫;

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



10 scrapy分为几个组成部分?分别有什么作用?

分为5个部分;Spiders(爬虫类),Scrapy Engine(引擎),Scheduler(调度器),Downloader(下载器),Item Pipeline(处理管道)。

Spiders:开发者自定义的一个类,用来解析网页并抓取指定url返回的内容。

Scrapy Engine:控制整个系统的数据处理流程,并进行事务处理的触发。

Scheduler:接收Engine发出的requests,并将这些requests放入到处理列队中,以便之后engine需要时再提供。

Download:抓取网页信息提供给engine,进而转发至Spiders。

Item Pipeline:负责处理Spiders类提取之后的数据。
比如清理HTML数据、验证爬取的数据(检查item包含某些字段)、查重(并丢弃)、将爬取结果保存到数据库中



11 python3.5语言中enumerate的意思是?

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


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

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

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


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

优点:

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

缺点:

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



14 scrapy和scrapy-redis的区别?

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

为什么会选择redis数据库?

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

什么是主从同步?

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


15 scrapy和requests的使用情况?

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

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


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

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


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

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




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

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

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

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

selenium / webdriver 模拟浏览器加载

对抓到的数据进行分析

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


19如何提高爬取效率?

爬虫下载慢主要原因是阻塞等待发往网站的请求和网站返回

   1,采用异步与多线程,扩大电脑的cpu利用率;

   2,采用消息队列模式

   3,提高带宽


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

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

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

 

快点来收藏吧!


Python.png

图片来源于网络

标签:惠州北大青鸟北大青鸟惠州Python培训惠州PythonPython培训Python


Python技术排行
标签列表
网站分类
文章归档
最近发表