相对今上午的面试,本次面试一上来就是一波三折,各种视频电话各种无法接通,后来终于接通了,感觉面试官的语气就很不耐烦,反正感觉心情很糟糕,一种爱面不面的口气。。。。。。整个面试过程持续了15分钟,整个面试过程感觉相当被动,让我有种有劲发不出来的感觉,算了,不说了,还是说说面试题吧。

1、你都遇到过哪些反爬虫措施?

这里就不列举我实际遇到的了,简单陈述一下实际开发过程中常见的发爬虫措施:

   一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式。前两种比较容易遇到,大多数网站都从这些角度来反爬虫。第三种一些应用ajax的网站会采用,这样增大了爬取的难度

1)、通过Headers反爬虫。从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。

  解决措施:如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。2)、基于用户行为反爬虫。还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作解决措施:(代理IP池)对于第一种情况,使用IP代理就可以解决。可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。这样的代理ip爬虫经常会用到,最好自己准备一个。有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫。  对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制

3)、动态页面的反爬虫。我们需要爬取的数据是通过ajax请求得到,或者通过JavaScript生成的。

解决措施:

首先用Firebug或者HttpFox对网络请求进行分析。如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。

能够直接模拟ajax请求获取数据固然是极好的,但是有些网站把ajax请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。遇到这样的网站,可以采用selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。

利用 selenium+phantomJS能干很多事情,例如识别点触式(12306)或者滑动式的验证码,对页面表单进行暴力破解等等。它在自动化渗透中还 会大展身手,以后还会提到这个。

2、你在做12306过程中都用到了那些库?用什么库进行的网页解析。。。

re/ lxml/ beautifulsoup/

3、你在做“TB数据爬虫分析可视化”的过程中,用到了那些库?

这个问题就不做阐述了!

4、简单解释一下scrapy框架的执行流程?

   首先是spider产生request并发送request,之后scrapyEngine将请求交给Schedule进行入队列,调度器将队列中请求按照先进先出的原则交给Downloader下载指定的网页,获取的response交给Spiders进行网页解析,解析完之后,如果是request,就将其交给Scheduler,如果是items,就交给Item Pipeline进行数据的存储和进一步处理。

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

5、scrapy框架和requests库在爬虫方面的不同点?

        requests 是库,主要是构造网络请求,获取网页内容,后续的解析、存储都要另行解决。 scrapy 是框架,可以说是爬虫的打包方案,除了上述构造请求、拿内容、解析、存储外,还可以做分布式爬虫,挂代理,等等一大堆功能。区别就是,假如是要做一个特别复杂的爬虫,可以用 scrapy。假如是临时小需求,可能学会配置 scrapy 的时间,已经足够用 requests 抓完数据了。换句话说就是scrapy的效率要远高于request的效率。(区别不仅仅这些,还有待补充。。。。。)

6、如果用scrapy框架进行爬取数据,中途突然中断了,如何实现对已经爬取过的网址进行去重?

参考该文章:Python进阶之爬虫url去重

7、你遇到过哪些验证码问题?如何解决的?

8、既然你的项目没有实际用TB级数据进行测试,那你认为

对于这个项目来说?

9、你还有什么问我的?

Python面试之麦穗人工智能“爬虫工程师实习生”相关推荐

  1. python爬虫工程师-记录一下自己找“python爬虫工程师实习生”岗位的经历

    今天是2018年9月11号,是我实习的第二天,记录一下找工作的历程,本来准备昨晚写的,但是第一天来实习,有点累了,就早点睡了,早上醒了,洗漱一下就来写这篇文章了. 鄙人的水平很低,而且还是一名大四的学 ...

  2. Python爬虫之实习生面试问题(一) 爬虫实习生 爬虫面试问题

    前言:当前时间:2021-12-9,以下面试问题只针对中小型企业普通面试,对于实习或初级爬虫工程师的面试.(如果有对您有帮助,点点赞就行:无帮助出门右转,勿喷) 一般面试问题都不会很难比较基础,考察基 ...

  3. 爱奇艺算法工程师实习生面试总结

    "微信公众号" 2018年6月19日 爱奇艺-技术产品中心-智能平台部-算法工程师实习生面试 一面: (1)问了一下自己去除水印的工作,问的很详细,会根据你的算法细节展开讨论,提出 ...

  4. 起薪2万的爬虫工程师,Python需要学到什么程度才能就业?

    爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬.那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答. 1.前段时间快要毕业,而我又不想找自己的老本行Java开发了,所 ...

  5. 起薪2万的爬虫工程师, Python需要学到什么程度才可以就业?

    做爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬.那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答. 1.前段时间快要毕业,而我又不想找自己的老本行Java开发了, ...

  6. python os 检查同名_2020Python 爬虫面试题,高薪就业Python面试必看

    先来一份完整的Python爬虫工程师关于Python面试的考点: 搞定这套 Python 爬虫面试题,Python面试 so easy 一. Python 基本功 1.简述Python 的特点和优点 ...

  7. python学到什么程度可以写爬虫-月薪2万的爬虫工程师,Python需要学到什么程度?...

    非计算机专业,正在自学python,很多教程里提到的网站的爬虫都会写了.比如拉勾网,豆瓣,实习僧,京东,淘宝,某妹子图等等--但是因为不是计算机专业的,也没学所谓的四大名著,不知道那四大对找工作重要吗 ...

  8. python网络爬虫工程师薪资-月薪2万的爬虫工程师,Python需要学到什么程度?

    Python 爬虫学到什么样就可以找工作了? 非计算机专业,正在自学python,很多教程里提到的网站的爬虫都会写了.比如拉勾网,豆瓣,实习僧,京东,淘宝,某妹子图等等--但是因为不是计算机专业的,也 ...

  9. python工程师薪资坑吗-最新Python面试经验总结,避免采坑的进来

    面试的心得体会: 1.简历制作 我做了两份简历,用两个手机账号,两个简历名字,分别在各个招聘网站投了双份简历,一个是数据分析的简历.一个是web全栈开发的简历,我真正接触python快2年,不管是学习 ...

最新文章

  1. JVM04内存结构概述
  2. nginx利用proxy_cache来缓存文件
  3. 华三实现vlan通过
  4. mysql五大子句_MySQL的查询语句中可以使用以下哪个子句来表示分组查询
  5. spring mvc学习(46):自定义配置类
  6. 在 Redis 上实现的分布式锁
  7. java创建android快捷方式_Android 通过应用程序创建快捷方式
  8. 关于armhf (hard-float ABI for ARM)
  9. python和java学哪个好-Python和Java两门编程语言,学习哪个更好?
  10. js系列教程6-BOM操作全解
  11. MacOS上的一些隐藏的快捷小技巧
  12. c++中的MFC可视化编程
  13. python27安装第三方抓包库(包括libdnet)
  14. PMSM FOC控制 Matlab/Simulink仿真之Clark变换
  15. JetPack之DataStore源码笔记
  16. 本地化ASP.NET core模型绑定错误消息
  17. svg格式的图片怎么放到word中?用这3种方法轻松解决!
  18. android最强论坛,Android开发论坛
  19. Android RSA 加密
  20. 【java】中文转拼音遇到的奇葩事件

热门文章

  1. java游戏修改器安卓5.0_Flash Game Player NEW
  2. M1卡破解(自从学校升级系统之后,还准备在研究下)【转】
  3. 2.CCNP闫辉视频笔记EIGRP
  4. python画三维坐标_Python中三维坐标空间绘制的实现
  5. IT人不可不知的10大男装品牌
  6. ubuntu-眼睛卫视
  7. 【信息安全】信息安全风险评估
  8. 循环卷积和线性卷积以及快速卷积计算
  9. provider:SQL Network Interfaces,error:26 - 定位指定的服务器/实例时出错--错误原因及解决办法
  10. mac下git使用ssh时候的一个小问题:Permission denied (publickey). fatal: Could not read from remote repository.