nodejs抓取动态网页(目标抓取网站上的妹子文件存放路径(二))

优采云 发布时间: 2022-04-14 09:29

  nodejs抓取动态网页(目标抓取网站上的妹子文件存放路径(二))

  目标

  在 网站 上获取女孩的照片。

  第三方模块

  superagent :用于处理来自服务器和客户端的 Http 请求的第三方 Nodejs 模块。

  Cheerio:为服务器端定制的 jQuery 实现。

  想法

  通过superagent获取目标网站的dom

  Cheerio 解析 dom 以获得总体布局。

  如果只是爬取一个页面,可以直接获取目标页面的目标元素

  如果是分页或者多页,可以通过多次循环爬取获取目标链接。

  完成

  在这里,我们实现了一个 网站 女孩的捕捉照片。

  目标 URL:(此 网站 没有恶意。)

  代码显示如下:

  //引入第三方和通用模块 var fs = require('fs');//为了将抓取的图像保存到本地,使用 fsvar superagent = require('superagent');//引入 superagentvarcheerio = require(' Cheerio');//引入jquery实现 var filePath = '/node/learning/sis/img/';//定义抓取姐妹文件的存储路径 var count = 0;//记录抓取次数 var test = []; // 抓取页面的实现。var getOnePage = function(url){ //因为煎蛋限制了请求,所以添加了cookie。如果你想访问网站,你可以通过浏览器找到cookie并替换它 superagent.get(url) .set({'user-agent':'Mozilla/5.0 (Windows NT 1 0.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/4<

  var u = '';if($(ele).attr('org_src')){u = $(ele).attr('org_src');}else{u = $(ele).attr('src' );}test.push(u);//通过superagent获取图片数据并保存在本地。superagent.get(u).end(function(err,sres){if(err)throw err;//根据访问路径获取文件名 var ttt = u.split('/');var name = ttt [ttt.length-1];var path = filePath+namefs.writeFile(path,sres.body,function(){count++;console.log(u);console.log('抓取成功..'+count+'张' );});});});if(null != nextUrl && '' != nextUrl){ //何时开始下一个请求 getOnePage(nextUrl);} }); }; getOnePage(''); //触发第一个请求开始

  1、如果你是有针对性的爬几个页面,做一些简单的页面分析,爬取效率不是核心要求,那么使用的语言差别不大。

  当然,如果页面结构复杂,正则表达式也很复杂,尤其是在使用了那些支持xpath的类库/爬虫库之后,你会发现这种方式虽然入门门槛低,但扩展性和可维护性却是惊人的。不同之处。所以在这种情况下,建议使用一些现成的爬虫库,比如xpath和多线程支持,这些都是必须要考虑的。

  2、如果是定向爬取,主要目标是解析js动态生成的内容

  这时候页面内容是由js/ajax动态生成的,普通的请求页面->解析方式是行不通的。需要使用类似于firefox和chrome浏览器的js引擎来动态解析页面的js代码。.

  这种情况下建议考虑casperJS+phantomjs或者slimerJS+phantomjs,当然selenium之类的也可以考虑。

  3、如果爬虫涉及到*敏*感*词*网站爬取,效率、可扩展性、可维护性等都是必须考虑的因素

  *敏*感*词*爬取涉及到很多问题:多线程并发、I/O机制、分布式爬取、消息通信、权重判断机制、任务调度等,这时候语言和框架的选择就很重要了。

  PHP 对多线程和异步的支持较差,不推荐使用。

  NodeJS:对于一些垂直的网站爬取是可以的,但是由于对分布式爬取、消息通信等支持较弱,请根据自己的情况判断。

  Python:强烈推荐,对上述问题有很好的支持。尤其是 Scrapy 框架当之无愧是首选。优点很多:支持xpath;以绞为基础,性能优良;更好的调试工具;

  这种情况下,如果还需要解析js动态内容,casperjs就不适合了,只能基于chrome V8引擎制作自己的js引擎。

  至于C和C++,虽然性能不错,但不推荐,特别是考虑到成本等诸多因素;对于大部分公司来说,建议基于一些开源框架来做,不要自己发明轮子,做一个简单的爬虫容易,但是做一个完整的爬虫很难。

  像我搭建的微信公众号的内容聚合网站是基于Scrapy的,当然也涉及到消息队列等等。可以参考下图:

  具体内容请参考某任务调度分发服务的架构

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线