如何在神箭手上快速开发爬虫——第五课 如何设置自定义输入【58同城二手房采集】

  1. 本课完整的爬虫代码可以在神箭手示例代码中查看
  2. 如何在神箭手上运行代码,请查看文档
  3. 更详细的爬虫开发教程,请查看文档


大家好,我是神箭手的游牧老师~

今天继续给大家带来 如何在神箭手上快速开发爬虫 系列教程的第五课:如何设置爬虫的自定义输入。

从这一课开始,我们要进入进阶学习了,对于基础知识还不熟悉的童鞋,请先从第一课开始学起啊:第一课点这里

在交付爬虫使用的时候,我们通常需要能够让使用者按照自己的需求来爬取,比如只爬某些分类的文章或者只爬某个城市的数据等。那这种变量就不能直接在代码里写死了,而需要有一个界面可以让使用者设置,然后在代码中根据使用者设置的具体值来爬取某些网页。

对于这种使用场景,神箭手提供了最简单灵活的解决方案:自定义输入。开发者只需要通过注释标注某些变量,使用的时候就可以通过神箭手的爬虫设置界面输入变量值,然后在代码中根据具体值来处理了。so easy~


我们来举个简单的栗子:

比如爬取58同城的二手房信息,使用者提出需求:我要自定义爬哪些城市的二手房。


第一步:

首先需要将城市作为自定义输入的变量,在神箭手上代码是这样写的:

var cities = ["北京"];//@tags(cities,58上的城市名,分别爬取这些城市的二手房信息)

通过注释来标注cities变量为自定义输入项,基本格式是:

var 变量名 = 变量的值;//@输入方式(变量名, 变量描述方便使用者理解)


这样标注后的变量会自动在神箭手的爬虫设置中显示:

输入方式包括以下类型,神箭手会自动根据输入方式在爬虫设置中显示相应的输入控件:

  • 1、input:其中包括string、int、bool、数组
  • 2、tags:string数组,常用于关键字或者简短文字的输入
  • 3、select:string,用于下拉选择框
  • 4、password:string,用于输入密码

更多类型和每个类型的详细说明请查阅开发文档:更详细的说明点这里

这里只是简单介绍了如何使用自定义输入,神箭手还支持更复杂的自定义形式,包括多个输入项、设置哪些输入项为必填项、不同输入项之间的关联等


第二步:

拿到参数的值(城市名)之后,代码中需要根据这些名字获取不同城市要爬取的入口页url,我们在initCrawl函数中进行操作:







/*
  在爬取开始前,先根据设置的城市名获取每个城市的入口页链接(也就是二手房列表的第一页)。
  并通过addScanUrl添加到入口页待爬队列中
*/
configs.initCrawl = function (site) {
    var options = {
      headers : {
        "User-Agent" : "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25"
      }
    };
    var cityContent = site.requestUrl("http://m.58.com/city.html", options);
    var cs = [];
    if(cities.length==0){
      cs = extractList(cityContent, "//ul[contains(@class,'city_lst') and not(contains(@class,'hot'))]//a/@href");      
    }else{
      for(var index=0;index<cities.length;index++){
        var url = extract(cityContent, "//ul[contains(@class,'city_lst') and not(contains(@class,'hot'))]//a[text()[1]='"+cities[index]+"']/@href");
        if(!url){
          console.log("未在58上发现该城市:"+cities[index]);
        }else{
          cs.push(url);
        }
      }
    }
    for(var i=0;i<cs.length;i++){
      var citypinyin = /m\.58\.com\/(.+?)\//.exec(cs[i]);
      if(citypinyin){
        site.addScanUrl("http://"+citypinyin[1]+".58.com/ershoufang/pn1");
      }
    }
};

我们首先访问58的城市列表网页,然后根据输入的城市名查到每个城市的58首页链接,然后就可以拼出每个城市的二手房首页url了。

这里我们多做了一步,如果不输入具体的城市,咱们就爬所有城市的!


然后就是根据列表页发现内容页url,然后从内容页中抽取数据的代码了,具体过程不是本课的重点,完整代码大家可以查看本文开头的链接。


第三步:

大家可以把代码拷贝到神箭手的爬虫应用中,然后点击爬虫设置,输入一个城市名;点击爬虫总览页,点击启动,等爬虫初始化完成,爬取结果就源源不断的出现啦:

是不是很简单!!!

最后说两句:

  1. 对于在神箭手上开发还不熟悉的童鞋,建议多看看神箭手的开发文档:神箭手开发文档点这里
  2. 本课完整代码:完整代码点这里

好啦,咱们下课再见,对爬虫和大数据感兴趣的童鞋可以关注神箭手技术博客 or 神箭手官网

分享至微信朋友圈 ×
打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。