首先要明确一点,python只不过是一个工具,学会了使用工具不代表你就能找到工作,要有用工具处理问题的能力才符合工作需求。
就像爬虫工程师,java也能实现,想要靠你学的python找到工作,实践经验才是加分项!
从招聘网站整理的爬虫工程师需要达到的要求:
【初级爬虫工程师】
① web 前端的知识: HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
② 正则表达式:能提取正常一般网页中想要的信息,比如某些特殊的文字, 链接信息, 知道什么是懒惰, 什么是贪婪型的正则;
③ 会使用 XPath 等获取一些DOM 结构中的节点信息;
④ 知道什么是深度优先, 广度优先的抓取算法, 及实践中的使用规则;
⑤ 能分析简单网站的结构, 会使用urllib或requests 库进行简单的数据抓取。
【中级爬虫工程师】
① 了解什么是HASH,会简单地使用MD5,SHA1等算法对数据进行HASH一遍存储
② 熟悉HTTP,HTTPS协议的基础知识,了解GET,POST方法,了解HTTP头中的信息,包括返回状态码,编码,user-agent,cookie,session等
③ 能设置user-agent进行数据爬取,设置代理等
④ 知道什么是Request,什么是response,会使用Fiddler等工具抓取及分析简单地网络数据包;
⑤ 对于动态爬虫,要学会分析ajax请求,模拟制造post数据包请求,抓取客户端session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
⑥ 对于一些难搞定的网站学会使用phantomjs+selenium抓取一些动态网页信息
⑦ 并发下载,通过并行下载加速数据爬取;多线程的使用。
【高级爬虫工程师】
① 能够使用Tesseract,百度AI,HOG+SVM,CNN等库进行验证码识别。
② 能使用数据挖掘技术,分类算法等避免死链。
③ 会使用常用的数据库进行数据存储,查询。比如mongoDB,redis;学习如何通过缓存避免重复下载的问题。
④ 能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁IP封禁等。
⑤ 能使用一些开源框架scrapy,scrapy-redis等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。
爬虫技能掌握简要对照:
【初级】
1)Python语言基础
2)相关的请求库
urllib、requests、selenium(动态网页用得上)
3)相关的解析库
BeautifulSoup、XPath、PyQuery、Re正则表达式
4)相关的数据库
MySQL、MongoDB
【中级】
1)Ajax(能通过Ajax接口获取数据)
2)了解基本的 Javascript
3)Puppeteer(基于JS的爬虫框架,可直接执行JS)
4)Pyppeteer(需要python异步知识)
5)多任务基础 & 爬虫提速
多进程、多线程、协程
6)抓取工具
fiddler、Charles、chrome、firefox
7)自动化爬取(爬App)
adb工具、Appium
8)Splash(动态渲染页面的抓取)
9)mitmproxy(中间人代理工具)
【高级】
1)爬虫框架
Scrapy、Pyspider
2)消息队列相关
RabbitMQ、Celery、Kafka
3)Redis 数据库
4)Scrapy
Redis(scrapy的redis组件)、Redis-BloomFilter(scrapy的布隆过滤器)、Cluster(分布式爬虫框架)
5)应对反爬的技术
验证码破解、IP代理池、用户行为管理
分流技术:cookies池、token池、sign池
【更高一级】
JS逆向、App逆向、运维、智能化爬虫
回到问题,针对python爬虫的面试一般会涉及到以下几个部分:
1、基本的编码基础Python
基础的数据结构你得会吧,数据名字和值得对应(字典),对一些url进行处理(列表)等等,爬虫给人的感觉好像对Python编程的知识要求并不高,确实,搞懂基本数据结构、语句,会写写函数好像就OK了,自己业余玩玩还行。
如果要找工作面试爬虫工程师,这远远不够,不要小瞧了爬虫工程师对编程基本功的要求,编程基本功要扎实。除了基本的函数,Python的高级特性、面向对象编程、多线程、装饰器都要熟悉。
分享一个最近在听的同行Python大佬的免费直播分享课,有提到很多Python岗位面试的经验和技巧,还蛮实用,传送门见下方↓↓
编程的功底,以及对语言的理解,从某种程度上可以看出学习能力和发展潜力。
2、HTTP知识
必备技能,要爬的是网页,所以必须要了解网页。
首先html文档的解析方法要懂,比如子节点父节点,属性这些。我们最终看到的网页是被浏览器处理了的,原始的网页是由很多标签组成的。
处理最好使用html的解析器,如果自己用正则匹配的话坑会很多,我个人xpath用得多,跨语言,表达比较好,但是呢也有缺点,正则、逻辑判断有点别扭。
HTTP协议要理解;HTTP协议本身是无状态的,那么“登录”是怎么实现的?这就要求去了解一下session和cookies了。
GET方法和POST方法的区别;
3、浏览器要熟练
爬虫的过程其实是模拟人类去浏览器数据的过程,所以浏览器是怎么访问一个网站的,要学会去观察。
Chrome的Developer Tools提供了访问网站的一切信息;
从traffic可以看到所有发出去的请求,copy as curl功能可以给你生成和浏览器请求完全一致的curl请求!我写一个爬虫的一般流程是这样的,先用浏览器访问,然后copy as curl看看有哪些header,cookies,然后用代码模拟出来这个请求,最后处理请求的结果保存下来。
4、数据库
这个就不用多讲了,数据保存肯定会要用到数据库的。有些时候一些小数据也可以保存成json或者csv等。
推荐使用NoSQL的数据库,比如mongodb,因为爬虫抓到的数据一般是都字段-值得对应,有些字段有的网站有有的网站没有,mongo在这方面比较灵活,况且爬虫爬到的数据关系非常非常弱,很少会用到表与表的关系。
5、爬虫与反爬
这是一个不断较量的过程,就像攻击武器与防御武器一样,双方总是在不断升级。
常见的反爬措施有:
1)IP限制
网站可能将识别的ip永久封杀,这种方式需要的人力比较大,而且误伤用户的代价也很高。但是破解办法却非常简单。目前代理池几乎是搞爬虫的标配了,甚至还有很多高匿代理等好用的东西,所以这基本上只能杀杀小爬虫。
2)登录限制
这也比较常见,不过公开信息的网站一般不会有这个限制,其实反爬措施或多或少的都会影响真实用户,反爬越严格,误杀用户的可能性也越高。
对爬虫来说,登录同样可以通过模拟登录的方式解决,加个cookie就行了(话又说回来,网络的原理很重要)。
3)访问频率
这很好理解,如果访问太频繁,网站可能针对你的ip封锁,这和防DDoS的原理一样。
碰到这样的,限制一下爬虫任务的频率和时间就可以了,尽量让爬虫想人类一样访问网页(比如随机sleep一段时间,如果每隔3s访问一次网站很显然不是正常人的行为)。
也就是控制访问的时间和频率;
4)通过Header封杀
一般浏览器访问网站会有header,比如Safari或者Chrome等等,还有操作系统信息,如果使用程序访问并不会有这样的header。
破解也很简单,访问的时候加上header就行。
5)验证码
验证码的形式各种各样的都有,难度不小;
验证码是专门用来区分人和计算机的手段,对于反爬方来说,这种方式对真实用户和搜索引擎(其实可以通过记录搜索引擎爬虫的ip来区别对待,可以解决)的危害比较大。
但这种方法也并不是无敌的,通过现在很火的机器学习可以轻松的识别大部分的验证码!Google的reCAPTCHA是一种非常高级的验证码,但是听说通过模拟浏览器也是可以破解的。
6)网站内容反爬
有一些网站将网站内容用只有人类可以接收的形式来呈现(其实反爬就是区别对待人类和机器嘛)。
比如将内容用图片的形式显示,但是近几年来人类和机器的差别越来越小,图片可以用OCR准确率非常高地去识别。
7)JavaScript脚本动态获取网站数据
有一些网站(尤其是单页面网站)的内容并不是通过服务器直接返回的,而是服务器只返回一个客户端JavaScript程序,然后JavaScript获取内容。
更高级的是,JavaScript在本地计算一个token,然后拿这个token来进行AJAX获取内容,而本地的JavaScript又是经过代码混淆和加密的,这样我们做爬虫的通过看源代码几乎不可能模拟出来这个请求(主要是token不可能破解)。
但是我们可以从另一个角度:headless的浏览器,也就是我们直接运行这个客户端程序,这可以100%地模拟真实用户。
上面说的是几种比较主流的反爬,当然还有非常多奇葩的反爬。比如返回假数据、返回图片化数据、返回乱序数据、返回骂人的数据、返回求饶的数据,那都具体情况看着办吧。
这些反爬也得小心点,之前见过一个反爬直接返回 rm -rf / 的也不是没有,你要是正好有个脚本模拟执行返回结果,后果自己想象哈。
看到这里,爬虫的一些涵盖知识点也差不多了,怎么样,梳理一下,上面总结的可以算是从爬虫小白到爬虫高手的路径了。爬虫重在实践,里面每个方向其实可研究的点非常多,要记得多练习实战哟!
实战薄弱一点的同学可以试试我上面分享的大佬的直播课,实战案例演示非常多,每一步都讲解的到位,小白也能听得懂~获取方式在下方
6、面试经验分享
【Python爬虫知识储备】
Python爬虫相关的知识与经验储备,通常也是面试官考察的重点,比如:
初级:
网络基础:cookie、session、https、headers常用的字段,代理使用等等
python基础:这个网上搜到的面经都得会,加上异步,多进程,多线程等等
爬虫:xpath、requests如何处理https、常见的反爬措施,举例说一个最难的爬虫过程,scrapy使用中的细节,例如代理,cookie,传参等等。
数据库:数据库操作,并表之类的。
碰到过一个:使用多线程生产者消费者模式完成网站爬虫,自己针对简单的网站写一个Demo,这个题目不光考察面试者的编码能力还有就是设计能力,大家可以去了解一下。
中级:
网络编程的问题基本在面试中必出现,比如高频发问:
网络:几层网络层的细节,比如说说udp/tcp/smtp区别,说说10.x.x.x/127.x.x.x/192.x.x.x的区别,说说 DNS,谈谈路由交换机的区别。
python:多重继承,多态,单例用装饰器的实现,数组/生成器/列表解析效率等等稍深入的细节
爬虫:分布式爬虫的实现,给你一个任务你马上给出一个合理的架构,验证码的处理,增量数据爬取,写爬虫时有没写些辅助工具。
数据库:sql nosql的细节,性能上的。
加分项:数据挖掘,机器学习,自然语言处理,能写网站,熟练操作linux,github小星星
【爬虫相关的项目经验】
具体来说就是你做过的项目,这块是面试准备时的重中之重。
项目经验这里根据自身的实际情况答就行,可别自己写的简历答起来却磕磕绊绊的,那也挺尴尬的。
【数据结构与算法】
是对面试者尤其是校招生面试的一个很重要的点,有些小公司可能不会太在意这些,从招聘情况来看,对面试者的数据结构与算法的重视程度与企业的好坏成正比,当然这也不是绝对的,可以多留意一下。
记得有事没事都可以多刷刷LeetCode上面的题或者看看剑指Offer,我身边的大佬跟我自己所遇到过的面试题基本上大多数公司的算法题都在这两大神器上出现过,看了是真香啊!
在面试过程中,会碰到的一些技术相关的问题总结,当然面试中不光是技术这一点,但是对于做技术的,过了技术面基本上就是薪资问题了。
7、最后几点小Tip
① 尽量拓展自己爬虫技术的深度和广度
深度就是类似反反爬、加密破解、验证登录等技术
广度就是分布式、云计算等等,这都是加分项
② 前端部分的掌握,尤其是最常用的 js、ajax、html/xhtml、css 等相关技术,懂前端技术的爬虫工程师会有一定的优势
③ 爬虫,不是抓取到数据就完事了,还需要数据抽取、清洗、消重等方面的经验。
④ 一般公司都会有自己的爬虫系统,维护爬虫系统也是日常工作之一。
⑤ 随着手持设备的市场占比越来越高,app 的数据采集、抓包工具的熟练使用会越来越重要。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
朋友们如果需要这份完整的资料可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
[[CSDN大礼包:《python兼职资源&全套学习资料》免费分享]](安全链接,放心点击)