保存到桌面加入收藏设为首页
java开发
当前位置:首页 > java开发

在浏览器客户端进行爬虫开发-安度博客

时间:2019-01-14 15:31:12   作者:   来源:   阅读:177   评论:0
内容摘要:JS是个神奇的语言,借助Node.js的后端情况,我们可以举行相应的爬虫开发,如这篇基于Node.js实现一个小小的爬虫但搭建后台情况始终略为贫苦,拿到一台新电脑,不用配情况,可不行以直接在nk" target="_blank">浏览器客户端直......
  • JS是个神奇的语言,借助Node.js的后端情况,我们可以举行相应的爬虫开发,如这篇 基于Node.js实现一个小小的爬虫

    但搭建后台情况始终略为贫苦,拿到一台新电脑,不用配情况,可不行以直接在nk" target="_blank">浏览器客户端直接实现呢?

    可以可以,这里就简朴地说一下在nk" target="_blank">浏览器客户端实现的爬虫抓取页面数据

    一、看法明确

    爬虫,简朴地说就是发一个请求,然后按一定逻辑剖析获取到的数据。

    在Node情况下,可以用Request模块请求一个地址,获得返回信息,再用正则匹配数据,或者用Cheerio模块包装-利便定位相关的标签项

    在浏览器情况下,也类似,可以用标签的src属性或Ajax请求一个地址,获得返回信息,再用正则匹配数据,或者用jQuery模块包装-利便定位相关的标签项

    二、实现

    实现的本质都是打开浏览器的开发者工具,写一段JS代码注入到页面中,然后让相关代码自执行地址请求,再通过代码处置惩罚返回的数据

    打开Chrome浏览器的开发者工具,选择面板中的 sources 部门,选择二级菜单的 script snippets 部门,然后右键新建一个剧本,在右方输入想注入的代码

    然后右键script snippets剧本运行(或者使用快捷键 Ctrl + Enter 运行)就可以开始注入,并可以在下方 console 部门看到相应的效果

    注入JS代码的方式是使用一个script标签,界说src指向的脚当地址,或者在标签中直接界说JS代码

    在浏览器端的爬虫实现,这里分为两个方面:一个是处置惩罚纯页面的请求,一个是处置惩罚Ajax的异步请求

    1. 纯页面

    要在当前页面直接请求一个纯页面,我们可以用 iframe 标签辅助,好比我想获取博客园这个分类下的博文信息

    找到这个页面的链接 http://www.cnblogs.com/cate/108703/,这个博文标题对应的class为 .post_item

    打开Chrome,在某个页面中,打开开发者工具,在上述说的位置输入这段代码

    var script = document.createElement('script');script.type = 'text/javascript';var iframe = document.createElement('iframe');// 使用到了ES6的新字符串,利便看代码var script_code = ` var doc = document.getElementById('my_iframe').contentWindow.document; console.log($(doc).find('.post_item').length);`;// 插入代码function insertMyscript() { script.appendChild(document.createTextNode(script_code)); document.body.appendChild(script);}iframe.src = 'http://www.cnblogs.com/cate/108703/';iframe.id = 'my_iframe';iframe.onload = function() { insertMyscript();};document.body.appendChild(iframe);

    代码很简朴,直接先通过iframe的src加载需要的页面,iframe的内容加载乐成再插入举行数据剖析的逻辑

    默认开发者工具是不支持jQuery的,但如果当前页面拥有jQuery,我们就可以直接使用了,如果没有,可以先插入一段引用当地JQ库的代码

    如此,已经可以剖析到页面内容

    2. Ajax请求

    Ajax的请求处置惩罚也类似

    在分析页面数据的获取时,有时候会发现数据是通过Ajax的异步JSON来获取的,我们相应的也使用这种异步方式

    用原生的Ajax未免代码量太多,可以直接借助JQ的实现

    好比这个页面http://www.ciweishixi.com/forum/ins-407,评论数太多,举行了分页。我们想找到包罗某些要害字的页,利便定位

    这个页面的分页请求是异步请求,所以注入代码举行循环遍历请求,剖析返回的JSON数据即可

    var script = document.createElement(&#39;script&#39;);script.type = &#39;text/javascript&#39;;var script_code = ` var url = &#39;http://www.ciweishixi.com/forum/comm-407-&#39; keyWords = &#39;广州&#39;; for (var i = 1; i < 200; ++i) { (function(_i) { $.ajax({ url: url + _i type: &#39;post&#39; success: function(re) { var str = &#39;Searching page &#39; + _i; if (re.indexOf(keyWords) !== -1) { str += &#39;: found !&#39;; } console.log(str); } error: function(e) { console.log(e); } }); })(i); } `;script.appendChild(document.createTextNode(script_code));document.body.appendChild(script);

    至于这个庞杂的顺序,是因为Ajax的异步特点,想要按顺序控制请求,可以加入一些Promise机制,或者用Generator生成器函数来实现一下即可

    更多的用法自行去掘客吧


最近更新

精彩推荐

阅读排行

本站所有站内信息仅供娱乐参考,不作任何商业用途,不以营利为目的,专注分享快乐,欢迎收藏本站!
所有信息均来自:百度一下 (威尼斯人官网)