以前提到动态加载就两个解决方案——手动分析和selenium。接下来的文章咱们会来深刻探讨它们,本文将首先,重点介绍前者——手动分析git
手动分析是一个比较有难度,比较麻烦的解决方案,但优势也很明显:速度快,又能培养咱们爬虫的分析能力(重要)。若是连接有规律可循,建议能手动分析就手动分析,不能再上selenium(培养能力挺重要的不是麽?并且快的爬虫谁不想要呢?)github
相信你们都有过这样的经历——进入一个网页,鼠标处处点,滑轮上下滚,各类框框各类信息都蹦出来了,可是网页连接没变过,网页也没从新刷新过json
好比:逛网页版的网易云音乐的评论时,不管评论翻到第几页,网址也不会改变;逛知乎时,鼠标不停往下滚,只要下面还有回答,就会不断的加载出来,一样网址也不会改变;segmentfault的问答区也是segmentfault
相似这样能不转跳不刷新就能加载新信息的网页,就是用了动态加载。背后有许多鲜为人知的“交易”进行着,动态爬取的任务就是“拦截”它们11揭开它们的真面目。详细请往下面看浏览器
首先记住——全部信息在理论上均可以经过请求(连接)得到
而后记住——有些请求须要提交参数,检查headers什么的来防爬
附加一点——大多数动态加载的信息,一般都是json数据服务器
有了这些指引提示咱们就能描绘出大概的分析思路post
完成以上四步一般就能得到目标json数据,剩下的就是分析json数据自己,把目标提取出来,方法上一篇文章讲过。网站
继续以某宝为例吧,随便搜一个商品进去,或者点我这个示例商品连接。打开F12,换到Network捉js的包,点到评论那里,很快就弹出不少个包,逐个查看其response,很快就肯定了目标包,而后评论换页,捉多几个供连接分析用。加密
这是一个包的请求连接spa
经过对比刚才捉到的多个包的连接,和屡次试验性发送请求,咱们能够分析出连接结构——ua(包括ua)以后参数是不影响请求结果的,currentPageNum是评论页数,auctionNumId是商品id,userNumId能够不要,这样就足以构造全部json数据的请求连接,至于一些决定排序的参数这里就再也不多分析,交给读者。
屡次试验后发现这个请求连接不须要提交数据,headers加个user-agent就能够返回数据
可是taobao返回的json数据有坑,注意一下
而后提取json数据,这样动态问题就解决了,能够完整的写出爬虫。jd评价的爬取和淘宝相似,详见github。
但连接乱到毫无规律可言,或者post参数加密到连妈都认不出来(而你也懒得或没能力去分析其加密方法),再或者你上面四步走完折腾了一成天也的得不到信息时,是时候该放手了,机器是死的,人是活的,不必和服务器玩持久战,加密防爬什么都不是咱们写的,破解不出来也是没办法的嘛
既然手动分析不行那只能请selenium大佬上场了,这货能模拟浏览器,能解决大部分动态网站。在爬虫界有着“霸王硬上弓”的称号,管它情不情愿,dalao来了动态加载也只有屈服的份了。这个dalao以后会介绍
下一篇将是一个完整的动态爬取实例,顺便接触一下带post参数的请求。