神箭手雷锋网demo爬虫解读

2019-03-13  本文已影响1人  幻想无极

爬虫代码

/*
  爬虫源码:全站爬取雷锋网的文章
  开发语言:原生JavaScript
  开发教程:http://docs.shenjian.io/develop/crawler/doc/concept/crawler.html
  请在神箭手云上运行代码:http://docs.shenjian.io/overview/guide/develop/crawler.html
*/
var configs = {
    domains: ["leiphone.com"],// 网站域名,设置域名后只会处理这些域名下的网页
    scanUrls: ["https://www.leiphone.com/search?s=vr&site=article"],// 入口页url,分别从这些网页开始爬取。爬虫默认会自动发现并爬取新网页
    contentUrlRegexes: [
        /https:\/\/www\.leiphone\.com\/news\/\d+\/.+\.html/
    ],// 内容页url的正则,符合这些正则的页面会被当作内容页处理
    helperUrlRegexes: [
        /https:\/\/www\.leiphone\.com\/search\?s=vr&site=article(&page=\d+)?/
    ],// 列表页url的正则,符合这些正则的页面会被当作列表页处理
    fields: [
        {
            // 抽取内容页的文章标题。默认抽取方式是xpath,也支持json和正则
            name: "article_title",
            selector: "//h1[contains(@class,'headTit')]",
            required: true  // required为true表示该项数据不能为空
        },
        {
            // 抽取内容页的文章内容
            name: "article_content",
            selector: "//div[contains(@class,'lph-article-comView')]",
            required: true
        },
        {
            // 抽取内容页的文章发布日期
            name: "article_publish_time",
            selector: "//td[contains(@class,'time')]",
            required: true
        },
        {
            // 抽取内容页的文章作者
            name: "article_author",
            selector: "//td[contains(@class,'aut')]/a",
            required: true
        }
    ]
};
 
/*
  回调函数afterExtractField:对抽取出来的数据进行处理
*/
configs.afterExtractField = function(fieldName, data, page, site) {
    if (fieldName == "article_publish_time") {
        var timestamp = Date.parse(data);
        return isNaN(timestamp) ? 0 : parseInt(timestamp/1000);// 抽取的发布日期转换成时间戳
      // 使用神箭手发布数据到CMS网站时,CMS网站默认处理的时间戳是10位。所以如非特殊,请转换成10位时间戳
    }
    return data;
};
 
// 使用以上配置创建一个爬虫对象
var crawler = new Crawler(configs);
// 启动该爬虫
crawler.start();

解读

contentUrlRegexes

  contentUrlRegexes: [
        /https:\/\/www\.leiphone\.com\/news\/\d+\/.+\.html/
    ],// 内容页url的正则,符合这些正则的页面会被当作内容页处理

helperUrlRegexes

 helperUrlRegexes: [
        /https:\/\/www\.leiphone\.com\/search\?s=vr&site=article(&page=\d+)?/
    ],// 列表页url的正则,符合这些正则的页面会被当作列表页处理

其中(&page=\d+)?表示页数可有可不有
例:https://www.leiphone.com/search?s=iOS&site=article&page=2

fields

article_title
selector: "//h1[contains(@class,'headTit')]",

html

<h1 class="headTit">
      4K之后,8K头显海外众筹表现不俗,小派科技为什么要死磕分辨率?                
</h1>
article_content
selector: "//div[contains(@class,'lph-article-comView')]",

获取class为lph-article-comView的内容

article_author
 selector: "//td[contains(@class,'aut')]/a",

html

<td class="aut">
       本文作者:<a href="https://www.leiphone.com/author/tianmiao" target="_blank" rel="nofollow">田苗</a>
 </td>
上一篇 下一篇

猜你喜欢

热点阅读