数据黑板
首发于数据黑板
如何在神箭手上快速开发爬虫——第八课 如何爬取手机瀑布流网页数据【手机网新闻】

如何在神箭手上快速开发爬虫——第八课 如何爬取手机瀑布流网页数据【手机网新闻】

1、本课完整的爬虫代码可以在神箭手示例代码中查看

2、如何在神箭手上运行代码,请查看文档

3、更详细的爬虫开发教程,请查看文档


大家好,我是来自神箭手的游牧老师。一段时间不见,不知道大家爬虫开发练习地怎么样了@@ 今天我继续给大家讲解新的爬虫开发知识点:如何爬取手机端网页和如何爬取下拉加载更多的这类瀑布流形式的网页数据!

对于基础知识还不熟悉的童鞋,请先从第一课开始学起啊:第一课点这里


以手机版的新闻网为例,打开可以发现是个典型的瀑布流形式的网页,访问到最底部的时候需要“下拉加载下一页”:

在神箭手上,要爬取手机移动版网页,只需要设置useragent为移动版设备即可,那么在请求网页的时候神箭手便会自动随机移动设备代理,不需要开发者专门去设置,而且可以有效减少反爬的几率:

userAgent : UserAgent.Mobile //指定ua为移动设备
userAgent : UserAgent.Android //指定ua为android设备
userAgent : UserAgent.iOS//指定ua为iOS设备


对于瀑布流形式的抓取,可以通过浏览器的network选项,很容易找到加载下一页时的具体请求:

请求的url为:app.cankaoxiaoxi.com/?。其中包括了下一页的页码,时间戳等参数

那么在开发的时候,我们只需要手动添加下一页列表页的url和列表页中包括的内容页url到待爬队列中,神箭手便会自动下载这些网页并从内容页中抽取需要的数据了,是不是很简单?


废话不多说,完整的代码如下。就这么简单的几行代码就能搞定手机瀑布路网页的爬取了!

/*
	云爬虫源码:爬取手机网的新闻内容,新闻列表是瀑布流形式
    
    开发语言:原生JavaScript
    开发教程:http://docs.shenjian.io/develop/crawler/doc/concept/crawler.html
    请在神箭手云上运行代码:http://docs.shenjian.io/overview/guide/develop/crawler.html
*/
var configs = {
  domains: ["cankaoxiaoxi.com"], //爬取的网站域名
  scanUrls: ["http://m.cankaoxiaoxi.com/"], //入口页url
  contentUrlRegexes: [/http:\/\/m\.cankaoxiaoxi\.com\/.+\/\d+\.shtml/], //内容页url正则
  helperUrlRegexes: [/http:\/\/app\.cankaoxiaoxi\.com\/\?app=shlist.+/], //列表页url正则
  userAgent : UserAgent.Mobile, // 设置请求的userAgent为手机移动设备,神箭手会自动随机主流的移动设备ua
  fields: [ // 从内容页抽取需要的数据
    {
      name: "title",
      alias: "标题",
      selector: "//article/h1", //默认使用XPath抽取
      required: true //标题是必有项
    },
    {
      name: "content",
      alias: "内容",
      selector: "//div[contains(@class,'content')]"
    },
    {
      name: "time",
      alias: "发布日期",
      selector: "//article//p[contains(@class,'time')]/span[1]"
    }
  ]
};

configs.onProcessScanPage = function (page, content, site) {
  // 下载入口页之后的回调,手动添加瀑布流列表的第一页url到待爬队列中
  var timestamp = Date.parse(new Date())/1000;
  var firstHelperUrl = "http://app.cankaoxiaoxi.com/?app=shlist&controller=mobile&action=index&page=1&update="+timestamp;
  site.addUrl(firstHelperUrl);
  return false; // 关闭自动url发现
};

configs.onProcessHelperPage = function (page, content, site) {
  // 下载列表页之后的回调
  content = content.replace("(","").replace(")",""); 
  var json = JSON.parse(content);
  if(json){
    for(var i in json){
      site.addUrl(json[i].url);// 手动添加列表页中的内容页url到待爬队列中
    }
  }
  
  var cpage = /page=(\d+)/.exec(page.url);
  if(cpage){
    cpage = parseInt(cpage[1]);
    if(cpage<100){ // 默认爬取100页列表页
      var npage = cpage+1;
      var timestamp = Date.parse(new Date())/1000;
      var nextHelperUrl = "http://app.cankaoxiaoxi.com/?app=shlist&controller=mobile&action=index&page="+npage+"&update="+timestamp;
      site.addUrl(nextHelperUrl);// 手动添加下一页列表页url到待爬队列中
    }
  }
  return false;// 关闭自动url发现
};

configs.onProcessContentPage = function (page, content, site) {
  // 下载内容页之后的回调
  return false;// 关闭自动url发现
};

// 启动爬虫
var crawler = new Crawler(configs);
crawler.start();


把代码拷贝到神箭手新建爬虫应用中,在总览页点击启动,便能看到爬取的新闻显示出来啦,赶紧去试试吧!

编辑于 2018-03-22

文章被以下专栏收录