Python 从零开始爬虫(六)——动态爬取解决方案 之 手动分析

以前提到动态加载就两个解决方案——手动分析和selenium。接下来的文章咱们会来深刻探讨它们,本文将首先,重点介绍前者——手动分析git

手动分析是一个比较有难度,比较麻烦的解决方案,但优势也很明显:速度快,又能培养咱们爬虫的分析能力(重要)。若是连接有规律可循,建议能手动分析就手动分析,不能再上selenium(培养能力挺重要的不是麽?并且快的爬虫谁不想要呢?)github

动态的标志

相信你们都有过这样的经历——进入一个网页,鼠标处处点,滑轮上下滚,各类框框各类信息都蹦出来了,可是网页连接没变过,网页也没从新刷新过json

好比:逛网页版的网易云音乐的评论时,不管评论翻到第几页,网址也不会改变;逛知乎时,鼠标不停往下滚,只要下面还有回答,就会不断的加载出来,一样网址也不会改变;segmentfault的问答区也是segmentfault

相似这样能不转跳不刷新就能加载新信息的网页,就是用了动态加载。背后有许多鲜为人知的“交易”进行着,动态爬取的任务就是“拦截”它们11揭开它们的真面目。详细请往下面看浏览器

分析什么

首先记住——全部信息在理论上均可以经过请求(连接)得到
而后记住——有些请求须要提交参数,检查headers什么的来防爬
附加一点——大多数动态加载的信息,一般都是json数据服务器

有了这些指引提示咱们就能描绘出大概的分析思路post

  • 首先咱们要找到json数据请求连接,经过F12捉包得到,这种包属于xhr或js里
  • 而后咱们经过分析多个json数据的请求连接的参数,规律,推出全部连接的结构
  • 若是json数据是一个post包,咱们还要分析要post的参数的内容,规律(加密的另谈)
  • 分析服务器是否检查请求的headers,如是,须要哪些额外headers(指user-agent外)

完成以上四步一般就能得到目标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参数的请求。

相关文章
相关标签/搜索