实现一个简易的网络数据采集工具,能够批量获取多个网页的内容,并支持查看与保存功能。工具界面包含"查看内容"和"保存到文件"两个核心按钮,可对预设的新闻列表页面进行标题与正文提取。
import win.ui;
/*DSG{{*/
var winform = win.form(text="网络数据采集";right=759;bottom=469)
winform.add(
button={cls="button";text="查看内容";left=213;top=377;right=325;bottom=421;z=1};
button2={cls="button";text="保存到文件";left=435;top=377;right=549;bottom=421;z=3};
edit={cls="edit";left=26;top=27;right=722;bottom=348;ah=1;aw=1;edge=1;multiline=1;vscroll=1;z=2}
)
/*}}*/
winform.show();var urls = {
"http://127.0.0.1:5500/public/news_list.html",
"http://127.0.0.1:5500/public/news_list.html?page=2",
"http://127.0.0.1:5500/public/news_list.html?page=3"
};
function collectData(urls){
var data = {};
for(i=1;#urls;1){
import string.html;
var winform = win.form(text="")
import web.view;
var wb = web.view(winform);
wb.go(urls[i])
var html = wb.html;
var htmlDoc = string.html(html)
var doc = htmlDoc.queryEles( tagName = "div" );
var h2 = doc[1].queryEles( tagName = "h2" );
for(i=1;#h2;1){
var titlelist = {};
var title = h2[i].innerText();
var titles = "文章标题为:" + title;
table.push(titlelist,titles)
table.push(data,titlelist)
}
var p = doc[1].queryEles( tagName = "p" );
for(i=1;#p;1){
var contentlist = {};
var content = p[i].innerText()
var contents = "文章内容为:" + content;
table.push(contentlist,contents)
table.push(data,contentlist)
}
}
var allContent = "";
for(k,value in data){
for(i=1;#value;1){
allContent += value[i]+'\r\n';
}
}
return allContent;
}for循环遍历每个URL,使用web.view加载网页并获取HTML源码。 string.html模块解析HTML,提取第一个div标签内的所有h2(标题)和p(正文)标签。 winform.button.oncommand = function(id,event){
var obj = collectData(urls);
winform.edit.print(obj)
}
winform.button2.oncommand = function(id,event){
var obj = collectData(urls);
var save = string.save("a.txt",obj);
if(save){
win.msgbox('保存文件成功')
}else {
win.msgbox('文件保存失败')
}
}
win.loopMessage();collectData函数获取数据,并将结果打印到编辑框。 a.txt,并通过弹窗提示操作结果。 话不多说,直接展示效果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。