【从零开始学爬虫】采集中国国际招标网招标数据

l 采集网站

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

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

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

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

【入口网址】

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

【采集内容】

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

图片

【采集效果】

如下图所示:

图片

l 思路分析

配置思路概览:

图片

l 配置步骤

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;//定义一个url
for(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值作为数据id
re.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.导出的文件

图片

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/84030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【广州华锐互动】3D空间编辑器:一款简洁易用的VR/3D在线编辑工具

随着虚拟现实技术的不断发展&#xff0c;数字孪生技术的应用已经被广泛应用于产品设计和制作中&#xff0c;能充分发挥企业应用3D建模的优势&#xff0c;凸显了三维设计的价值&#xff0c;在生产阶段也能够充分发挥3D模型的作用。 如今&#xff0c;广州华锐互动开发的3D空间编辑…

高速道路监控:工业路由器助力高速监控远程管理与维护

工业路由器在物联网应用中扮演着重要的角色。物联网的发展使得大量设备和传感器能够互联互通&#xff0c;而工业路由器作为连接这些设备和网络的中间桥梁&#xff0c;承担着数据传输和安全管理的重要责任。 工业路由器能够为高速监控提供网络功能&#xff0c;实现户外无线网络部…

Python自动化测试代理程序可用性

在网络爬虫和数据采集过程中&#xff0c;代理服务器扮演着重要的角色。然而&#xff0c;代理服务器的可用性经常会受到影响&#xff0c;给爬虫工作带来一定的挑战。本文将介绍如何使用Python自动化测试代理程序的可用性&#xff0c;为您提供具备实际操作价值的解决方案。让我们…

SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习

SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录&#xff08;第二天&#xff09;Mybatis的深入学习&#xff08;增删改查的操作&#xff09; 上一篇我们的项目搭建好了&#xff0c;也写了简答的Junit测试类进行测试&#xff0c;可以正确映射…

【Linux】cpolar+JuiceSSH实现手机端远程连接Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

商业智能BI是什么都不明白,如何实现数字化?

2021年下半年中国商业智能软件市场规模为4.8亿美元&#xff0c;2021年度市场规模达到7.8亿美元&#xff0c;同比增长34.9%&#xff0c;呈现飞速增长的趋势。数字化时代&#xff0c;商业智能BI对于企业的落地应用有着巨大价值&#xff0c;逐渐成为了现代企业信息化、数字化转型中…

贝锐蒲公英助力建设工程咨询企业,高效安全远程访问数据档案库

随着数字信息化进程的加深&#xff0c;数字化转型已成为企业实现业务流程自动化、提高工作效率、降低成本和提高用户满意度的重要手段。其中&#xff0c;档案工作的标准化、规范化是信息化建设的前提和必要条件&#xff0c;对于建设工程咨询企业而言&#xff0c;一个完善的数字…

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑工业出版社,2022.

​&#xff18;th参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑工业出版社&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&a…

Revit 3D高效处理:cad exchanger sdk 3.21 Crack

3D 格式概述&#xff1a;Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit&#xff1f; Autodesk Revit 是一款流行的 CAD 软件&#xff0c;重点关注 BIM&#xff0c;被建筑师、工…

3D角色展示

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>3D卡片悬停</title><style>font-face {font-family: "Exoct";src: url("htt…

机器学习,过拟合与欠拟合,正则化与交叉验证

目录 机器学习 过拟合与欠拟合 正则化与交叉验证 正则化 交叉验证 机器学习 的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。 不同的机器学习方法会给出不同的模型。当损失函数给定时&#xff0c;基于损失函数的模型的训练误差&#xff08;tra…

vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件

文章目录 ⭐前言⭐react 组件传值实例&#x1f496;父组件传值给子组件&#xff08;props&#xff09;&#x1f496;子组件传递事件给父组件props绑定事件&#x1f496;父组件触发子组件的事件Ref ⭐vue3 组件传值实例&#x1f496; 父组件传递数据给子组件props&#x1f496; …

三维重建 PyQt Python MRP 四视图(横断面,冠状面,矢状面,3D)

本文实现了 Python MPR 的 四视图&#xff0c;横断面&#xff0c;冠状面&#xff0c;矢状面&#xff0c;3D MPR(multi-planner reformation)也称多平面重建&#xff0c;多重面重建是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行冠状、矢状位、…

JAMstack架构:快速构建安全、高性能的现代应用

随着Web应用的快速发展&#xff0c;开发者们在寻找更加高效、安全和可维护的应用架构。JAMstack架构应运而生&#xff0c;它通过将前端、后端和部署过程分离&#xff0c;提供了一种现代化的方式来构建Web应用。在本文中&#xff0c;我们将深入探讨JAMstack架构的特点、优势以及…

ES 索引重命名--Reindex(一)

ES reindex脚本流程&#xff0c;下图为整体流程&#xff1a; 步骤&#xff08;1&#xff09;&#xff1a;每次写入把之前的索引删除再重新创建索引&#xff0c;然后判断索引是否创建成功&#xff0c;由于创建成功返回结果是json&#xff0c;因此用Json Input插件去解析json获得…

ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks使用分析

ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks使用分析 1 ATF的下载链接2 ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks处理流程2.1 ATF BL1/BL2 ufs_read_blocks2.2 ATF BL1/BL2 ufs_write_blocks 3 UFS System Model4 ufs_read_blocks/ufs_write_blocks详细分析4.1 ufs_re…

备份服务器搭建

备份服务器搭建 1、背景2、作用3、选型4、环境5、部署5.1、服务端部署5.1.1、安装5.1.2、配置 5.2、客户端部署5.3、备份策略5.3.1、定时备份策略5.3.2、文件变动备份 6、参考 1、背景 随着项目的推进&#xff0c;备份服务器被提上了工作日程&#xff0c;等保、密评和接入测评…

selenium Chrome驱动下载地址

Chrome驱动官方最新版下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 有稳定版&#xff0c;开发版等版本可以选择下载 选择 操作系统复制下载链接直接下载

CentOS7安装部署Doris

文章目录 CentOS7安装部署Doris一、前言1.简介2.环境 二、正文1.Doris基础1&#xff09;架构图2&#xff09;通讯端口 2.部署服务器3.安装基础环境1&#xff09;安装JDK 112&#xff09;安装GCC3&#xff09;设置文件句柄数4&#xff09;关闭交换分区&#xff08;swap&#xff…

微服务参数透传实现

说明&#xff1a;在微服务架构中&#xff0c;用户身份经网关验证后&#xff0c;我们可以将用户信息&#xff0c;如ID加入到请求头上。后面的微服务中&#xff0c;可以设置一个拦截器&#xff0c;拦截请求&#xff0c;获取请求头上的用户ID&#xff0c;加入到ThreadLocal中。 最…