前言

前段时间需要通过搜索引擎采集一些目标站,找了以前自己收集的一些工具,发现大多都失效了,没失效的也不怎么好用,思考了一下,还是决定自己来弄一个,这里借鉴的是法克论坛URL采集工具,这款工具在我电脑上失效了,感谢前辈们的工具。

正文

准备

  • 易语言
  • 精益模块
  • 精益web浏览器支持库
  • 精益web浏览器填表模块

编写

首先是GUI部分,这里我们简单地规划出了浏览器操作区、配置区以及我们的输出区。

GUI

简单地规划出GUI之后开始编写我们的核心代码:

核心代码

这里做了一些URL的处理,对于百度和搜狗这两个搜索引擎来说,他们的URL是经过处理的,不会直接显示在HTML内,故我们需要进行单独的访问并提取出真实URL。百度是返回的302跳转,真实URL在响应头的Location中,而搜狗是返回的200状态码,真实URL在页面内容中的script标签内。

由于易语言对于双引号的转义不太方便,这里我们为了方便选择使用长文本常量存储。

初始化

以及针对百度的特殊处理:

百度

剩下就是一些把功能拼起来,这里就略过不表。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
.版本 2
.支持库 wke
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 采集状态, 逻辑型
.程序集变量 搜索引擎取URL_正则, 文本型
.程序集变量 Ajax状态, 逻辑型

.子程序 取URL
.参数 正则表达式, 文本型
.局部变量 HTML源代码, 文本型
.局部变量 取URL正则, 正则表达式类
.局部变量 计次, 整数型
.局部变量 URL, 文本型
.局部变量 标记URL, 文本型, 静态
.局部变量 miniblink填表, miniblink填表
.局部变量 响应头, 文本型


Ajax状态 = 真
HTML源代码 = wke_Utf8ToAnsi (精易Web浏览器1.取网页源码 ())
取URL正则.创建 (正则表达式, HTML源代码)

.计次循环首 (取URL正则.取匹配数量 (), 计次)

URL = 取URL正则.取子匹配文本 (计次, 1)

.如果真 (计次 = 1)
.如果 (URL ≠ 标记URL)
标记URL = URL
miniblink填表.web_SetWebView (精易Web浏览器1.取WebView ())
miniblink填表.web_SetScrollTop (99999)
.否则
跳出循环 ()
.如果结束

.如果真结束

.如果真 (搜索引擎_组合框.内容 = “百度”)
网页_访问_对象 (URL, 2, , , , , 响应头, , 真, , , , , , )
URL = 文本_取右边 (文本_取指定变量文本行 (响应头, 8), “Location: ”)
.如果真结束
.如果真 (搜索引擎_组合框.内容 = “搜狗”)
调试输出 (URL)
URL = 文本_取出中间文本 (到文本 (网页_访问_对象 (“https://www.sogou.com” + URL, 0)), “<a href=” + #引号, #引号 + “ id=”, 0, 假)
.如果真结束

URL输出框.内容 = URL输出框.内容 + URL + #换行符
.计次循环尾 ()


.子程序 搜索引擎初始化, 文本型
.参数 所选引擎, 文本型
.参数 关键字, 文本型

.如果真 (所选引擎 = “Google”)
搜索引擎取URL_正则 = #取URL正则表达式_Google
返回 (“https://www.google.com/search?q=” + 关键字)
.如果真结束
.如果真 (所选引擎 = “百度”)
搜索引擎取URL_正则 = #取URL正则表达式_百度
返回 (“https://www.baidu.com/s?wd=” + 关键字)
.如果真结束
.如果真 (所选引擎 = “Bing”)
搜索引擎取URL_正则 = #取URL正则表达式_Bing
返回 (“https://cn.bing.com/search?q=” + 关键字)
.如果真结束
.如果真 (所选引擎 = “360搜索”)
搜索引擎取URL_正则 = #取URL正则表达式_360搜索
返回 (“https://www.so.com/s?j=1&q=” + 关键字)
.如果真结束

搜索引擎取URL_正则 = #取URL正则表达式_搜狗
返回 (“https://www.sogou.com/web?query=” + 关键字)



.子程序 _开始采集_按钮_被单击

.如果 (采集状态 = 假 且 关键字_编辑框.内容 ≠ “”)
采集状态 = 真
精易Web浏览器1.浏览网页 (搜索引擎初始化 (搜索引擎_组合框.内容, 关键字_编辑框.内容))
开始采集_按钮.标题 = “停止采集”
.否则
采集状态 = 假
开始采集_按钮.标题 = “开始采集”
.如果结束



.子程序 __启动窗口_创建完毕
.局部变量 输出, 文本型


采集状态 = 假
Ajax状态 = 假
Initialize ()


.子程序 _精易Web浏览器1_文档就绪
.参数 就绪框架ID, 整数型

.如果真 (采集状态 = 真)
取URL (搜索引擎取URL_正则)
.如果真结束


.子程序 _精易Web浏览器1_URL被改变
.参数 URL, 文本型
.参数 所属框架ID, 整数型
.局部变量 所选引擎, 文本型

所选引擎 = 搜索引擎_组合框.内容
.如果真 (所选引擎 = “百度” 且 Ajax状态 = 真)
精易Web浏览器1.浏览网页 (URL)
Ajax状态 = 假
.如果真结束

后记

为什么要用易语言来编写?

1、之前学过一点易语言,有基础

2、第三方优秀模块多,类似功能实现起来应该不难

3、精益论坛日活量高,大佬多且热心帮助他人

4、软件GUI可视化生成,懒狗必备

关于我与易语言之间

易语言是我学的第一门”编程语言“,想起来还是我高一高二的事情,易语言带我进入的编程的世界(菜狗不会英语),我很感谢她,虽说她的名声并不好听,但在我看来,易语言亦如一把宝剑,能杀人亦能救人。不管黑猫白猫,能抓到老鼠的猫就是好猫,易语言有精益模块等非常优秀的第三方模块,以及日活量挺高且求助区活跃大佬多的精益社区,这么看起来也并非完全不推荐学习。