当前位置: 首页 > 后端技术 > Python

干货-2020年十大Python面试题,你知道几个?

时间:2023-03-26 19:01:39 Python

0你遇到过反爬虫策略和解决方案吗?1、通过headers基于用户行为的反爬虫:(短时间内同一IP的访问频率)动态网页反爬虫(通过ajax请求数据,或者通过JavaScript生成)对部分数据进行加密(数据乱码)解决方法:对于基础的网页爬取,可以自定义headers,添加headers的数据可以使用多个proxyip爬取或者设置降低爬取频率。对于动态网页,可以使用selenium+phantomjs来抓取和加密一些数据。可以用selenium截屏,用python自带的pytesseract库来识别,但是比较慢最直接的方法还是找加密的方法进行逆向推理。1urllib和urllib2有什么区别?urllib和urllib2都是接受URL请求的相关模块,但是urllib2可以接受Request类的实例来设置URL请求的头部,而urllib只能接受URL。urllib无法伪装您的用户代理字符串。urllib提供了用于GET查询字符串生成的urlencode()方法,但urllib2没有。这就是urllib经常与urllib2一起使用的原因。2列出网络爬虫使用的网络数据包,并分析数据包?网络数据包urllib、urllib2、请求解析包re、xpath、美汤、lxml3简单描述一下爬虫的步骤?确定需求;确定资源;通过url获取网站返回数据;定位数据;存储数据。4如何处理防爬机制?反爬机制:Headers方向判断User-Agent、判断Referer、判断Cookie。添加浏览器的所有headers信息注:Accept-Encoding;gzip、deflate需要注释掉5常见的HTTP方法有哪些?GET:请求指定页面信息,返回实体主体;HEAD:与get请求类似,只是返回的response中没有具体内容,用于捕获header;POST:向指定资源提交数据,用于处理请求(如表单提交或上传文件)。数据包含在请求正文中。PUT:从客户端向服务器传输数据,替换指定文件的内容;DELETE:请求删除指定页面;CONNNECT:保留在HTTP1.1协议中,用于代理服务器,可以将连接方式改为管道方式;OPTIONS:允许客户端检查服务器的性能;TRACE:回应服务器的请求,主要用于测试或诊断。6说说redis在redis-scrapy中的作用?它用redis数据库替代scrapy框架中的Scheduler,实现队列管理共享。优点:可以充分利用多台机器的带宽;可以充分利用多台机器的IP地址。7遇到的反爬虫策略和解决方案?headers反爬虫:自定义headers,在网页中添加headers数据。基于用户行为的反爬虫(封IP):可以使用多个代理IP进行爬虫或降低爬虫频率。动态网页反爬虫(JS或Ajax请求数据):使用selenium+phantomjs可以爬取动态网页。部分数据加密处理(数据乱码):找到加密方式,进行逆向推理。8如果让你防范网站爬虫,应该如何提高爬虫的难度?判断headers的User-Agent;检测同一IP的访问频率;通过Ajax获取数据;爬取行为是爬取页面的源文件。如果要爬取静态网页的html代码,可以使用jquery模仿写html。9scrapy分为几个组件?各自的作用是什么?分为5个部分;Spiders(爬虫)、ScrapyEngine(引擎)、Scheduler(调度器)、Downloader(下载器)、ItemPipeline(处理管道)。蜘蛛:开发者自定义的类,用于解析网页,抓取指定url返回的内容。ScrapyEngine:控制整个系统的数据处理流程,触发事务处理。Scheduler:接收Engine发送过来的请求,并将这些请求放入处理队列中,以便引擎稍后在需要的时候提供。下载:抓取网页信息提供给引擎,再转发给蜘蛛。ItemPipeline:负责处理Spiders类抽取的数据。例如,清理HTML数据,验证爬取的数据(检查项目是否包含某些字段),检查重复(并丢弃),并将爬取的结果保存到数据库中。10简述scrapy的基本流程?scrapy分为9个步骤:Spiders需要初始的start_url或函数stsrt_requests,它会在内部生成Requests给Engine;Engine向Scheduler发送请求;Engine从Scheduler获取请求,交给Download;在交给Dowmload的过程中,会经过DownloaderMiddlewares(通过process_request函数);Dowmloader下载完页面后会产生一个response,这个response会传递给Engine,这个过程会经过DownloaderMiddlewares(通过process_request函数);如果传输过程中出现错误,会通过process_exception函数;Engine会将DownloaderSend的response传递给Spiders进行处理,这个过程会经过SpidersMiddlewares(通过process_spider_input函数);Spiders处理响应,返回两种类型的Requests或Items,并传递给Engine,这个过程经过SpidersMiddlewares(通过porcess_spider_output函数);Engine接收返回的信息,如果是Item,则传递给ItemsPipeline;如果是Requests,则传递给Scheduler,继续爬取;重复第三步,直到没有要爬取的数据。想了解python的朋友可以私信我“113”哦