学习爬虫的感想和心得

写爬虫真不是件简单的事

  学习了大概两个月的爬虫,渐渐感觉到写爬虫并不是件简单的事,有诸多的考虑,先简单的记录一下,有时间分部分做示例

 

一、学习爬虫知识

  我是从python3开始做爬虫的,首先,python3的语法必须知道,不过python3并不难,语法也非常简洁。但是,写着发现有个毛病,就是比如一个形参,由于不确定类型,.无法像java那样补全,导致你如果忘了一个函数,必须查看代码或手册。。。不过这也是动态语言都有的问题,但好的IDE会帮你记录,所以使用好的IDE很有必要。。哈哈。

  然后是学习python的各种库,为了打好基础,从基础的库开始学习会比较好,比如urlib,然后学习requests,这种是用来发请求的。返回的数据又是各种各样的类型,有html,js,json,字符串等,针对每种格式,当然都需要合适的解析器,当然,正则都能做。。。这里,解析html用到xpath,beautifulsoup,pyquery等库,js代码需要js引擎来运行和分析,例如nodejs,v8,json的解析要用到json库,字符串就看具体情况了。

    做完这些,基本上可以开始爬取一些数据了。。。但是,如果爬虫真的就这么简单的话,,那就好了哈

  然后你会想提高爬取的速度,你了解到requests库是同步请求,也就是从发出请求到收到响应,线程一直在等,你当然啊会想到多线程,但python单进程只能跑满一个核。。。并且多线程也没那么好写吧,同步控制,分配任务也需要挺多事的。所以,从python3.5开始,新增了一个aiohttp--异步请求库,它可以发送一批请求,以事件驱动,根据回调函数来实现单线程异步。或许你会觉得这还是不够方便,开始使用爬虫框架,例如scrapy,这下速度突飞猛进,瓶颈在带宽或io上了!

二、分析网站

  好了,这下普通的网站能随心所欲的爬了,直到这天,你打开了某做了反爬的网站。。。

    为啥爬了一下就不能爬了?为啥返回结果和浏览器打开的不一样啊?怎么这个要验证码啊?怎么这个要登录?于是开始了解到需要使用代理防止封ip,需要伪造头部装得够像浏览器。需要分析请求,分析各种参数代表什么意思,如何伪造,开始学习js和分析js的加密代码---这个是真的恶心,使用postman发请求和vscode编码和nodejs运行进行调试,或者可以用selenium+chrome这种大杀器直接莽过去,可是速度可比直接请求api慢多了。碰到需要登录才能获取cookies才能爬的网站,开始做注册机(但是现在一般要手机号,成本高),或者买账号,用来做cookie池。登录需要识别验证码?验证码可就千奇百怪了,人工打码or打码平台or机器学习?终于,在掌握这么多分析技能之后,感觉到爬取一个网站多么麻烦,需要很高成本。。。

栗子:破解某网站js加密过程

三、部署项目

  前面终于写好了爬取复杂网站的分析和技巧,现在需要部署项目,服务器就需要不少,数据库需要准备吧,需要做分布式吧,docker,hadoop了解一下?还要维护稳定,处理各种异常,总不能跑一下就挂了吧。还有,网站突然改动一下加密,,得跟着改啊。

 

posted @ 2019-01-04 13:20  happy_codes  阅读(9753)  评论(0编辑  收藏