半路学Python爬虫,学到什么程度可以去找工作了?_学会scrapy是不是能找工作了(1)

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爬虫相关的知识与经验储备,通常也是面试官考察的重点,比如:

  • 你遇到过的反爬虫的策略有哪些?
  • 你常用的反反爬虫的方案有哪些?
  • 你用过多线程和异步吗?除此之外你还用过什么方法来提高爬虫效率?
  • 有没有做过增量式抓取?
  • 对Python爬虫框架是否有了解?

初级:

网络基础:cookie、session、https、headers常用的字段,代理使用等等

python基础:这个网上搜到的面经都得会,加上异步,多进程,多线程等等

爬虫:xpath、requests如何处理https、常见的反爬措施,举例说一个最难的爬虫过程,scrapy使用中的细节,例如代理,cookie,传参等等。

数据库:数据库操作,并表之类的。

碰到过一个:使用多线程生产者消费者模式完成网站爬虫,自己针对简单的网站写一个Demo,这个题目不光考察面试者的编码能力还有就是设计能力,大家可以去了解一下。

中级:

网络编程的问题基本在面试中必出现,比如高频发问:

  • 向浏览器发送一个请求到返回中间经历了什么?
  • 说说三次握手和四次挥手
  • HTTPS 是如何实现安全数据传输的?

网络:几层网络层的细节,比如说说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的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值