神箭手内置Page对象的属性和方法

- 作者:神箭手官网 ——来源:神箭手官网 ——

page对象主要是在回调函数中传递使用,表示正在爬取网页。它的生命周期对应的是URL的生命周期。简单的说就就是URL被调度后开始它的生命周期,page对象会随后创建,并一直持续到URL的生命周期结束之前。那么page对象有哪些属性和方法,page对象的属性有:url,raw,contextData,request和response,page对象的方法只有一个skip(),通常用来过滤抽取结果。下面对属性和方法进行详细的讲解。

属性


一、url

String url

网当前页的链接地址。url的值只能在beforeDownloadPage和afterDownloadPage函数中修改,在其他回调函数中修改均不会影响后续的回调函数。

二、raw

String raw

下载的网页原始内容。beforeDownloadPage中raw的值为null,因为此时还未开始下载。raw的值只能在afterDownloadPage回调函数中修改,在其他回调函数中修改均不会影响后续的回调函数。

page.rawcontent的区别:
有的回调函数会回传一个content参数,说明也是网页内容,区别在于,page.raw是网页的原始下载内容(afterDownloadPage函数内部修改后的),content基于page.raw做了网页链接处理,把其中的相对链接地址替换成了绝对链接地址。

三、contextData

String contextData

当前网页的附加数据,是site.addUrl的时候附加的contextData数据。

注意:
如果site.addUrl的时候,附加的数据是JS对象,此处的contentData是JSON字符串,需要JSON.parse才能转换成原来的JS对象。

四、request

JS对象 request

当前网页的HTTP请求对象,属性包括urlmethoddataheaders

  • url String
    等同于page.url

  • method String
    HTTP的请求方式,GETPOST

  • data JS对象
    POST参数。

  • headers JS对象
    请求的header头。示例值如下:

    {
      "Cookie": "EXAMPLEUID=8853949B8FD7CEC798A8591AFCD5D42A:FG=1; EXUPSID=8853949B8FD7CEC798A8591AFCD5D42A; EX_PSSID=25641_1452_21097_17001_22158; EXTM=1517829664; ",
      "User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_10_2) AppleWebKit/536.10 (KHTML, like Gecko) Chrome/63.0.3239 Safari/537.17"
    }
    

 

五、response

JS对象 response

当前网页的HTTP响应对象,属性包括statusCodestatusReasonisRedirectredirectLocationsheaders

  • statusCode Integer
    HTTP状态码,发生重定向时,此状态码是重定向后的状态码。参考HTTP状态码大全

  • statusReason String
    HTTP响应状态字符串,与状态码对应。

  • isRedirect Boolean
    是否发生重定向。

  • redirectLocations String数组
    发生重定向时的重定向地址,发生多次重定向时,数组按重定向的顺序依次记录。

  • headers JS对象
    返回的header头。
    注意:Set-Cookie很可能会有多个,它的值是一个字符串数组
    示例值如下:

 

方法skip

function skip(fieldName)

@param String fieldName 抽取项名,可不传。

此函数可以用来过滤抽取结果。不传参数时,即page.skip(),表示丢弃当前整个网页的抽取结果。传fieldName时,表示过滤该field下的当前抽取结果。

示例1:文章标题中不含”经济学”,过滤掉

configs.afterExtractField = function(fieldName, data, page, site) {
  if (fieldName == "article_title") {
    //如果"article_title"的抽取结果中不包含"经济学",就过滤掉这篇文章
    if (data.indexOf("经济学") == -1) {
      page.skip();
    }
  }
  return data;
};

示例2:过滤掉点赞数小于5的评论

configs.afterExtractField = function(fieldName, data, page, site) {
  if (fieldName == "comments.agree_count") {
    //如果评论的点赞数小于5,过滤掉"comments"的这条抽取结果
    if (parseInt(data) < 5) {
      page.skip("comments");
    }
  }
  return data;
};

如果你还有其它疑问可以来本站搜索相关问题,这里会有你想要的答案:火车脚本网

还有什么疑问可以提出来
  • 全部评论(0
    还没有评论,快来抢沙发吧!