htmlunit 抓取网页(AngularJS-pageapplication框架如何判断前端渲染判断页面多)
优采云 发布时间: 2021-09-19 23:22htmlunit 抓取网页(AngularJS-pageapplication框架如何判断前端渲染判断页面多)
抓取前端呈现页面
随着Ajax技术的不断普及和angularjs等单页应用框架的出现,越来越多的页面被JS呈现。对于爬虫来说,这种页面很烦人:仅提取HTML内容通常无法获得有效信息。那么如何处理这种页面呢?一般来说,有两种方法:
在爬行阶段,浏览器内核内置到爬行器中,页面在爬行之前由JS呈现。这方面的相应工具是selenium、htmlunit或phantom JS。然而,这些工具存在一些效率问题,并且不太稳定。其优点是编写规则与静态页面相同。由于JS呈现页面的数据也是从后端获取的,基本上是通过Ajax获取的,因此分析Ajax请求并找到相应的数据请求也是可行的。此外,与页面样式相比,此界面不太可能更改。缺点是找到这个请求并模拟它是一个相对困难的过程,需要相对较多的分析经验
比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法可以节省时间和精力。然而,对于长期和*敏*感*词*的需求,第二个将更可靠。对于一些网站,甚至一些JS混淆技术,目前,第一种方法基本上是万能的,而第二种方法将非常复杂
这里我们以angularjs中文社区{{global.Metallic}为例
1如何判断前端渲染
判断页面是否以JS呈现的方法相对简单。在浏览器中直接查看源代码(windows中为Ctrl+u,MAC中为Command+Alt+u)。如果找不到有效的信息,基本上肯定会在JS中呈现
在本例中,如果在源代码中找不到页面中的标题“优孚计算机网络-前端攻城师”,则可以断定是JS渲染,数据是通过Ajax获取的
2分析请求
让我们转到最难的部分:查找数据请求。此步骤可以帮助我们的工具,主要是用于在浏览器中查看网络请求的开发人员工具
以chome为例。让我们打开“开发者工具”(windows上的F12和MAC上的Command+Alt+I),然后再次刷新页面(它也可能是一个下拉页面,简而言之,所有您认为可能触发新数据的操作),然后记住保留场景并逐个分析请求
这一步需要一点耐心,但并非没有规则可循。首先可以帮助我们的是上面的分类过滤器(所有、文档等)。如果是普通的Ajax,它将显示在XHR标记下,jsonp请求将显示在scripts标记下。这是两种常见的数据类型
然后你可以根据数据的大小来判断。通常,结果的大小越大,越有可能是返回数据的接口。其余的基本上取决于经验。例如,这里的“最新的?P=1&S=20”乍一看是可疑的
对于可疑地址,您可以查看响应主体是什么。我们无法在开发人员工具中清楚地看到它。我们复制/API/文章/最新版本?P=1&S=20到地址栏,并再次请求它(如果您安装了chrome推荐的JSON查看器,则可以方便地查看Ajax结果)。看看结果,我们似乎找到了我们想要的
同样,我们转到post详细信息页面,找到了对特定内容的请求:/API/article/a0y2
以上信息摘自webmagic