网页爬虫小工具

因为工作的需要,需要不定期的从网上收录一些公开招标、中标结果的信息,原有方式是手动一条一条录入,极其耗费时间。后来写了个网页爬虫工具,以此来节省时间。

现在将这个工具从构思到实现的过程进行回顾。

图1-需要采集信息的网页
图2-网页源代码片段
主需求:从网页提取关键信息,并进行呈现展示;
次需求1:结合工作的统计需求,工具需要支持Excel输出;
次需求2:提取的信息条数很多,工具需要支持批量提取;
次需求3:网页内容的格式不一,工具需要支持定义格式。
a. 加载配置文档;
b. 读取网页源代码;
c1. 根据包含住预提取信息的文字头、文字尾提取内容;
c2. 提取项目编号、项目名称、采购单位、招标代理等字段;
d. 对提取到的内容进行呈现;
e. 输出,后台激活excel,写入信息保存并关闭。

现在主流是使用Python,但一来我没学过Python编程,二者我觉得python没有比较良好的互动界面,所以最后还是选择了E语言。

支持国产编程语言,那可是责无旁贷。

需要准备以下环境或支持

a. E语言编程环境(包含E语言程序、静态编译支持)
b. 精易模块(使用的版本是5.15,要使用”取中间文本”的功能函数)
c. excel类模块(网上找的一个模块,为了支持Excel输出)
图3-提取信息的主界面
图4-批量提取信息的主界面
图5-工具配置方案的主界面
图6-配置文档参考
[code title=”a#加载配置文档#关键代码#节选” lang=”PYTHON”] ………… GV方案名称 = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “方案名称”, ) GV方案配置行 = 到数值 (读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “方案配置行”, )) GV方案保存路径 = 取运行目录 () + 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “方案保存路径”, ) GV方案提取内容头 = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “方案提取内容头”, ) GV方案提取内容尾 = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “方案提取内容尾”, ) ………… .计次循环首 (GV方案配置行, 循环数X) GV项名称 [循环数X] = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “项名称” + 到文本 (循环数X), ) GV项次序 [循环数X] = 到数值 (读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “项次序” + 到文本 (循环数X), )) GV项是否链接 [循环数X] = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “项链接” + 到文本 (循环数X), ) = “真” GV项填充方式 [循环数X] = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “项填充” + 到文本 (循环数X), ) GV提取匹配数量 [循环数X] = 到数值 (读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “提取匹配” + 到文本 (循环数X), )) .计次循环首 (GV提取匹配数量 [循环数X], 循环数Y) GV提取编码模式 [循环数X] [循环数Y] = 到数值 (读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “提取编码” + 到文本 (循环数X) + “-” + 到文本 (循环数Y), )) GV提取内容头 [循环数X] [循环数Y] = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “提取内容头” + 到文本 (循环数X) + “-” + 到文本 (循环数Y), ) GV提取内容尾 [循环数X] [循环数Y] = 读配置项 (取运行目录 () + “\setup.ini”, 选择项目, “提取内容尾” + 到文本 (循环数X) + “-” + 到文本 (循环数Y), ) .计次循环尾 () .计次循环尾 () ………… [/code]
用全局变量,保存从ini配置里读取到的内容头和内容尾,用于下一步的匹配。
[code title=”b#读取网页源代码#关键代码#节选” lang=”PYTHON”] ………… 网页源码 = 网页_取网页源码 (网址) 网页源码 = 编码_utf8到gb2312 (网页源码) 网页源码 = 文本_取出中间文本 (网页源码, GV方案提取内容头, GV方案提取内容尾) ………… [/code]
三个函数都调用了精易模块里的函数。
[code title=”c#根据包含住预提取信息的文字头、文字尾提取内容#关键代码#节选” lang=”PYTHON”] ………… 模式 = GV提取编码模式 [序号] [循环数] 内容头 = GV提取内容头 [序号] [循环数] 内容尾 = GV提取内容尾 [序号] [循环数] 内容 = 文本_取出中间文本 (网页源码, 内容头, 内容尾))) ………… [/code]
函数”文本_取出中间文本”调用了精易模块里的函数。
[code title=”b#读取网页源代码#关键代码#节选” lang=”PYTHON”] ………… 网页源码 = 网页_取网页源码 (网址) 网页源码 = 编码_utf8到gb2312 (网页源码) 网页源码 = 文本_取出中间文本 (网页源码, GV方案提取内容头, GV方案提取内容尾) ………… [/code]
这里使用了”高级表格”。
[code title=”e#输出,后台激活excel,写入信息保存并关闭#关键代码#节选” lang=”PYTHON”] ………… .如果真 (文件是否存在 (GV方案保存路径) = 假) 信息框 (“Excel文件不存在,请在工具配置中设置保存的Excel文件路径!”, 0, ) 返回 () .如果真结束 ‘ ———————————打开文件 Excel程序A.创建 () Excel工作簿A.置程序 (Excel程序A) Excel工作簿A.关闭 () Excel工作簿A.取工作簿对象 ().写属性 (“DisplayAlerts”, 假) Excel工作簿A.打开 (GV方案保存路径) Excel工作簿A.激活工作簿 () Excel工作簿A.表格序号 = 1 ‘ ———————————判断是否有表头 Excel工作簿A.首单元格 = “A1” Excel工作簿A.尾单元格 = “A1” 表格内容 = Excel工作簿A.内容 .如果真 (表格内容 = “”) Excel工作簿A.内容 = “序号” .计次循环首 (GV方案配置行, 循环数) Excel工作簿A.首单元格 = 字符 (97 + GV项次序 [循环数]) + 到文本 (1) Excel工作簿A.尾单元格 = 字符 (97 + GV项次序 [循环数]) + 到文本 (1) Excel工作簿A.内容 = GV项名称 [循环数] .计次循环尾 () Excel工作簿A.首单元格 = 字符 (98 + GV方案配置行) + 到文本 (1) Excel工作簿A.尾单元格 = 字符 (98 + GV方案配置行) + 到文本 (1) ………… [/code]
Excel类调用了excel类模块
图7-提取信息效果
图8-Excel导出效果
图9-通过搜索页批量找网址后匹配提取
a. 主要调用了精易模块的几个函数(”网页_取网页源码” “编码_utf8到gb2312 ” “文本_取出中间文本”)来完成主功能需求;
b. 找一个网友分享的Excel类模块来做文件输出;
c. 做到可以用配置文件配置匹配方案,工具会更加方便使用;
d. 举一反三,通过搜索页来实现批量提取。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注