目录
    采集中国国际招标网招标数据
    视频教程:模板下载:

    l 采集网站

    【场景描述】采集中国国际招标网招标数据。

    【源网站介绍】中国国际招标网致力于为企业提供招标、采购、拟在建项目信息及网上招标采购等一系列商务服务。


    【使用工具】前嗅ForeSpider数据采集系统

    http://www.forenose.com/view/commodity/forespider.html


    【入口网址】

    http://chinabidding.mofcom.gov.cn/channel/business/bulletinList.shtml?s=

    【采集内容】

    采集字段:公告名、发布时间、正文内容、链接、公告类型、所属地区。


    【采集效果】

    如下图所示:



    思路分析

    配置思路概览:


    配置步骤

    1.新建采集任务

    选择【采集配置】,点击任务列表右上方【+】号可新建采集任务,将采集入口地址填写在【采集地址】框中,【任务名称】自定义即可,点击下一步。

     

    2.获取分类链接

    在浏览器中打开中国国际招标网,我们要采集所有招标公告、招标变更公告、评价结果公示和中标结果公告中的公告内容,所以第一步是获取以上分类的请求链接。


    在浏览器中,分别搜索各类公告,发现页面链接没有变化,说明对应的数据在请求链接中。点击F12,打开开发者工具,选择Network,然后搜索任何一个分类比如“招标变更公告”,开发者工具中,出现该分类对应请求,如图所示:



    观察发现该请求是一个post请求,其通过post Form Data来传递信息。

    该请求的链接为:http://chinabidding.mofcom.gov.cn/zbwcms/front/bidding/bulletinInfoList

    该请求的Form Data为:pageNumber=1&keyWord=&timeType=&rangeCode=&typeCode=2&capitalSourceCode=&industryCode=&provinceCode=


    同样的方法,观察其他分类对应的请求,发现“招标公告”请求链接为:http://chinabidding.mofcom.gov.cn/zbwcms/front/bidding/bulletinInfoList

    该请求的Form Data为:

    pageNumber=1&keyWord=&timeType=&rangeCode=&typeCode=1&capitalSourceCode=&industryCode=&provinceCode=


    Post请求链接是不变的,其Form Data中的typeCode参数是变化的,观察发现各分类对应typeCode如下所示:


    招标公告-1 招标变更公告-2  评标结果公告-3  中标结果公告-4


    根据以上规律,在ForeSpider中用脚本拼写请求,具体如下所示:

     

    脚本文本如下所示:


    array cla;    //定义一个数组cla = [{name:"招标公告",num:1},{name:"招标变更公告",num:2},{name:"评标结果公告",num:3},{name:"中标结果公告",num:4}];   //数组对象内容分别为分类名和对应typeCode
    url u;//定义一个urlfor(int i = 0;i < cla.length; i++){//循环数组  u.title = cla[i].name+"#"+cla[i].num;   //链接标题为:分类名#typeCode  u.urlname = "http://chinabidding.mofcom.gov.cn/zbwcms/front/bidding/bulletinInfoList";   //链接请求为post请求  u.tmplid = 2;   //关联模板02  u.entryid = CHANN.id;  //固定搭配,请求排重  var post="pageNumber=1&keyWord=&timeType=&rangeCode=&typeCode="+cla[i].num+"&capitalSourceCode=&industryCode=&provinceCode=";//拼post Form Data  RESULT.AddLink(u,post);   //返回请求}



    3.获取翻页链接

    用同样的方法观察不同分类招标公告在不同页面上的请求,发现其post请求链接没变,不同分类不同翻页的请求与其Form Data中的pageNumber参数、typeCode参数有关。


    例如:pageNumber=2&keyWord=&timeType=&rangeCode=&typeCode=1&capitalSourceCode=&industryCode=&provinceCode= ,返回的是招标公告第二页的数据内容。


    根据以上规律,在ForeSpider中新建模板02链接抽取模板,用脚本拼写请求,具体如下所示:

     

    脚本文本如下所示:
    var str = DOM.GetSource().ToStr();//获取到所有源码
    jScript js;//定义一个js
    var obj = js.RunJson(str);//运行js
    var page=obj.maxPageNum;//取源码中最大页数
    for(int i = 1;i <= 3; i++){//循环翻页  
    url u;//定义一个url  
    u.title =URL.title.Left("#")+"第"+ i+"页"+URL.title.Right("#");   //链接标题为:公告分类+翻页数+分类参数  
    u.urlname = "http://chinabidding.mofcom.gov.cn/zbwcms/front/bidding/bulletinInfoList";   //请求链接  
    u.tmplid = 3;   //关联模板03  
    u.entryid = CHANN.id;  //固定搭配  
    var post="pageNumber="+i+"&keyWord=&timeType=&rangeCode=&typeCode="+URL.title.Right("#")+"&capitalSourceCode=&industryCode=&provinceCode=";//拼写Form Data参数  
    RESULT.AddLink(u,post);   //返回请求}


    采集预览观察生成的链接,是否与网页中对应的翻页链接和Form Data一致,如果一致则继续配置下一步。


     

    4.获取招投标公告列表链接

    ①新建模板03,在其下新建一个链接抽取模板,具体操作如下所示:

     

    ②在浏览器上观察翻页请求链接返回的源码中的公告数据内容,如下所示:



    根据数据结构,在ForeSpider中,用脚本抽取列表链接数据,具体如下所示:


    脚本文本如下所示:


    var str = DOM.GetSource().ToStr();//获取到所有源码
    jScript js;//定义一个js
    var obj = js.RunJson(str);//运行js
    var page=obj.maxPageNum;//取源码中最大页数
    for(int i = 1;i <= 3; i++){//循环翻页
    	url u;//定义一个url
    	u.title =URL.title.Left("#")+"第"+ i+"页"+URL.title.Right("#");   //链接标题为:公告分类+翻页数+分类参数
    	u.urlname = "http://chinabidding.mofcom.gov.cn/zbwcms/front/bidding/bulletinInfoList";   //请求链接
    	u.tmplid = 4;   //关联模板03
    	u.entryid = CHANN.id;  //固定搭配
    	var post="pageNumber="+i+"&keyWord=&timeType=&rangeCode=&typeCode="+URL.title.Right("#")+"&capitalSourceCode=&industryCode=&provinceCode=";//拼写Form Data参数
    	RESULT.AddLink(u,post);   //返回请求
    }



    5.抽取招投标公告数据

    ①新建模板04,在其下新建一个数据抽取模板,用来抽取招投标公告数据。

     

    ②在数据建表模块,新建一个数据表,字段如下所示:

     

    ③关联数据表

    在数据抽取处关联新建的数据表。

     

    ④字段publish_time、biaoStage、text_title、text_url、city在上一层均已获取到并通过链接标题传递到本层,所以可直接使用脚本从链接标题中获取。


    字段text_all需在数据页源码中获取,在浏览器中打开任意一个公告数据页,点击F12,查找到正文数据在源码中对应的位置,如下图所示:

     

    我们发现正文内容在class为mt20 clearfix的节点下,所以用脚本取该节点文本即可。数据抽取脚本如下所示:

     

    脚本文本如下所示:


    var str=DOM.GetSource().ToStr();//获取数据页所有源码
    record re;//定义一个返回值re.id=MD5(URL.urlname);//获取数据页链接的MD5值作为数据idre.publish_time=URL.title.Middle("%%","~~");//从链接标题中提取发布时间并返回值re.biaoStage=URL.title.Left("@");//从链接标题中提取公告类别并返回值re.text_title=URL.title.Middle("@","$$");//从链接标题中提取公告标题并返回值re.text_url=URL.urlname;//返回数据页链接re.city=URL.title.Middle("$$","%%");//从链接标题中提取城市并返回值re.text_all=DOM.GetTextAll(DOM.FindClass("mt20 clearfix"));//找到mt20 clearfix节点,并获取其下所有文本内容返回RESULT.AddRec(re,this.schemaid);



    ⑤采集预览,如下图所示,各类招标数据已被采集出来了,说明模板配置完成。

     

    |采集步骤

    模板配置完,采集预览没有问题,可以进行数据采集。


    1.建立数据表单

    选择【数据建表】,点击【表单列表】中该模板的表单,在【关联数据表】中选择【创建】,表名称自定义,这里命名为【guojizb】(注意命名不能用数字和特殊符号),点击【确定】。创建完成,勾选数据表,并点击右上角保存按钮。

     

    2.开始采集

    选择【数据采集】,勾选任务名称,点击【开始采集】,则正式开始采集。

     

    3.导出数据

    采集结束后,可以在【数据浏览】中,选择数据表查看采集数据,并导出数据。

     

     

    4.导出的文件


    本教程仅供教学使用,严禁用于商业用途!