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

来源:互联网 发布:伊利丹7.3知乎 编辑:程序博客网 时间:2024/04/30 04:11

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,然后从内容页中抽取数据的代码了,具体过程不是本课的重点,完整代码大家可以查看本文开头的链接。

  • 第三步:

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

这里写图片描述

是不是很简单!!!

最后说两句:

对于在神箭手上开发还不熟悉的童鞋,建议多看看神箭手的开发文档:神箭手开发文档点这里
本课完整代码:完整代码点这里
好啦,咱们下课再见,对爬虫和大数据感兴趣的童鞋可以关注神箭手技术博客 or 神箭手官网

阅读全文
0 0
原创粉丝点击