「产业气象站」我到底要学多少东西呢?,就想写个爬虫


「产业气象站」我到底要学多少东西呢?,就想写个爬虫
文章图片
当今大数据的时代 , 网络爬虫已经成为了获取数据的一个重要手段 。
但要学习好爬虫并没有那么简单 。 首先知识点和方向实在是太多了 , 它关系到了计算机网络、编程基础、前端开发、后端开发、App开发与逆向、网络安全、数据库、运维、机器学习、数据分析等各个方向的内容 , 它像一张大网一样把现在一些主流的技术栈都连接在了一起 。 正因为涵盖的方向多 , 因此学习的东西也非常零散和杂乱 , 很多初学者搞不清楚究竟要学习哪些知识 , 学习过程中遇到反爬也不知道用什么方法来解决 , 本篇我们来做一些归纳和总结 。
初学爬虫
一些最基本的网站 , 往往不带任何反爬措施 。 比如某个博客站点 , 我们要爬全站的话就顺着列表页爬到文章页 , 再把文章的时间、作者、正文等信息爬下来就可以了 。
那代码怎么写呢?用Python的requests等库就够了 , 写一个基本的逻辑 , 顺着把一篇篇文章的源码获取下来 , 解析的话用XPath、BeautifulSoup、PyQuery或者正则表达式 , 或者粗暴的字符串匹配把想要的内容抠出来 , 再加个文本写入存下来就完事了 。
代码很简单 , 就几个方法调用 。 逻辑很简单 , 几个循环加存储 。 最后就能看到一篇篇文章就被我们存到自己的电脑里面了 。 当然有的同学可能不太会写代码或者都懒得写 , 那么利用基本的可视化爬取工具 , 如某爪鱼、某裔采集器也能通过可视化点选的方式把数据爬下来 。
如果存储方面稍微扩展一下的话 , 可以对接上MySQL、MongoDB、Elasticsearch、Kafka等等来保存数据 , 实现持久化存储 。 以后查询或者操作会更方便 。
反正 , 不管效率如何 , 一个完全没有反爬的网站用最最基本的方式就搞定了 。
到这里 , 你就说你会爬虫了吗?不 , 还差的远呢 。
Ajax、动态渲染
随着互联网的发展 , 前端技术也在不断变化 , 数据的加载方式也不再是单纯的服务端渲染了 。 现在你可以看到很多网站的数据可能都是通过接口的形式传输的 , 或者即使不是接口那也是一些JSON的数据 , 然后经过JavaScript渲染得出来的 。
这时候 , 你要再用requests来爬那就不顶用了 , 因为requests爬下来的源码是服务端渲染得到的 , 浏览器看到页面的和requests获取的结果是不一样的 。 真正的数据是经过JavaScript执行的出来的 , 数据来源可能是Ajax , 也可能是页面里的某些Data , 也可能是一些ifame页面等等 , 不过大多数情况下可能是Ajax接口获取的 。
所以很多情况下需要分析Ajax , 知道这些接口的调用方式之后再用程序来模拟 。 但是有些接口带着加密参数 , 比如token、sign等等 , 又不好模拟 , 咋整呢?
一种方法就是去分析网站的JavaScript逻辑 , 死抠里面的代码 , 揪出来这些参数是怎么构造的 , 找出思路来了之后再用爬虫模拟或重写就行了 。 如果你解出来了 , 那么直接模拟的方式效率会高非常多 , 这里面就需要一些JavaScript基础了 , 当然有些网站加密逻辑做的太牛逼了 , 你可能花一个星期也解不出来 , 最后放弃了 。
「产业气象站」我到底要学多少东西呢?,就想写个爬虫
文章图片
那这样解不出来或者不想解 , 那咋办呢?这时候可以有一种简单粗暴的方法就是直接用模拟浏览器的方式来爬取 , 比如用Puppeteer、Pyppeteer、Selenium、Splash等 , 这样爬取到的源代码就是真正的网页代码 , 数据自然就好提取了 , 同时也就绕过分析Ajax和一些JavaScript逻辑的过程 。 这种方式就做到了可见即可爬 , 难度也不大 , 同时模拟了浏览器 , 也不太会有一些法律方面的问题 。
但其实后面的这种方法也会遇到各种反爬的情况 , 现在很多网站都会去识别webdriver , 看到你是用的Selenium等工具 , 直接干掉或不返回数据 , 所以你碰到这种网站还得来专门解一下这个问题 。


推荐阅读