写爬虫真不是件简单的事
学习了大概两个月的爬虫,渐渐感觉到写爬虫并不是件简单的事,有诸多的考虑,先简单的记录一下,有时间分部分做示例
一、学习爬虫知识
我是从python3开始做爬虫的,首先,python3的语法必须知道,不过python3并不难,语法也非常简洁。但是,写着发现有个毛病,就是比如一个形参,由于不确定类型,.无法像java那样补全,导致你如果忘了一个函数,必须查看代码或手册。。。不过这也是动态语言都有的问题,但好的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机器学习?终于,在掌握这么多分析技能之后,感觉到爬取一个网站多么麻烦,需要很高成本。。。
三、部署项目
前面终于写好了爬取复杂网站的分析和技巧,现在需要部署项目,服务器就需要不少,数据库需要准备吧,需要做分布式吧,docker,hadoop了解一下?还要维护稳定,处理各种异常,总不能跑一下就挂了吧。还有,网站突然改动一下加密,,得跟着改啊。
转载于:https://www.cnblogs.com/haoabcd2010/p/10219310.html
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试