Nodejs 在咱们坛子练习 node-webkit
Nodejs 在咱们坛子练习 node-webkit
前几天看到坛子里面很多人问有关node-webkit的问题,也就去看了下,真的还不错,就想着学习下,然后就拿咱们的坛子做demo了,下面是截图:
###1.进入画面:直接输入你在咱们坛子里面的用户名就行了
###2.加载画面:加载数据…
###3.显示画面:Home是首页的数据, Post是自己发布的, Join是自己参与的
###4.再来一张:
###5.再来一张:
这里讲下我的实现: 我知道我不可能有接口,何况我也没有送礼所以我也不能直接去数据库抓数据啊,屌丝没有办法啊,然后我爬,我爬,我爬爬爬,呵呵呵, 我写了一个小爬虫,然后爬取指定的页面抓取指定的数据,每次在进入的时候都会去抓取一次数据,所以在第一次进入的时候看到的数据是最新的,但是过一会就不一定了,可能坛子里面有新帖子就无法更新了(暂时的,我会接着完善),
###But, 输入用户名之后发现数据不齐全,或者没有抓到头像,这个…爬虫的问题,我还在努力解决中…你可以多试几次进入-_-!!!
其实里面还有很多的问题没有得到解决,代码写的也有点乱,计划是点击标题的时候抓取文章内容的,但是不知道为什么我的jquery没有效果,所以导致现在只能看到title,一些计划的特效也都没有实现(失败)!
这里是源码链接,大家懂得… https://github.com/Dn9x/Webkit-demo
还请大家多多指教啊…
Nodejs 在咱们坛子练习 node-webkit
前几天看到坛子里有很多人问有关 node-webkit
的问题,于是我决定自己动手学习一下。node-webkit
是一个基于 Chromium 和 Node.js 的桌面应用开发框架,可以让你用 HTML、CSS 和 JavaScript 构建跨平台的应用程序。为了更好地理解它,我选择使用咱们的论坛作为示范。
实现过程
我通过编写一个简单的爬虫来抓取论坛的数据,并将其展示在一个桌面应用中。以下是具体的实现步骤:
- 进入画面:用户输入自己的用户名即可进入应用。
- 加载画面:在加载过程中,显示“加载数据…”提示。
- 显示画面:展示用户的首页数据、已发布的内容以及参与的话题。
示例代码
首先,我们需要安装必要的依赖包:
npm install node-webkit nw-gyp request cheerio
接下来,创建一个简单的爬虫脚本来抓取论坛数据:
const request = require('request');
const cheerio = require('cheerio');
function fetchUserData(username) {
const url = `https://example.com/user/${username}`;
return new Promise((resolve, reject) => {
request(url, (err, res, body) => {
if (err) {
return reject(err);
}
const $ = cheerio.load(body);
let data = {
posts: [],
joinedThreads: []
};
// 解析数据
$('.post').each((index, element) => {
data.posts.push($(element).text());
});
$('.thread').each((index, element) => {
data.joinedThreads.push($(element).text());
});
resolve(data);
});
});
}
module.exports = fetchUserData;
在这个例子中,我们使用 request
库来获取网页内容,然后使用 cheerio
来解析 HTML 并提取所需数据。
接下来,在 index.html
中展示这些数据:
<!DOCTYPE html>
<html>
<head>
<title>论坛数据展示</title>
<script src="fetchUserData.js"></script>
</head>
<body>
<input type="text" id="username" placeholder="请输入用户名">
<button onclick="loadData()">加载数据</button>
<div id="content"></div>
<script>
async function loadData() {
const username = document.getElementById('username').value;
try {
const data = await fetchUserData(username);
document.getElementById('content').innerHTML = `
<h1>首页数据</h1>
<ul>${data.posts.map(post => `<li>${post}</li>`).join('')}</ul>
<h1>已发布的内容</h1>
<ul>${data.posts.map(post => `<li>${post}</li>`).join('')}</ul>
<h1>参与的话题</h1>
<ul>${data.joinedThreads.map(thread => `<li>${thread}</li>`).join('')}</ul>
`;
} catch (error) {
console.error(error);
}
}
</script>
</body>
</html>
总结
虽然我在实现过程中遇到了一些问题,比如数据抓取不全和 jQuery 没有生效等,但这些问题都是可以逐步解决的。代码目前可能有些混乱,但我计划进一步优化和完善。希望各位能够提供宝贵的意见和建议,帮助我改进这个项目。
源码链接
希望大家能多多指教!
go go
赞一个, 没想到我还被蜘蛛盯上了 https://github.com/Dn9x/Webkit-demo/blob/master/test.js#L5
只是测试而已,没有别的意思哦!
你这个在ANDROID机上跑的?
ubuntu windows也可以,我开发在ubuntu,用的时候在windows上面
顶一下 略牛B
node-webkit 针对的是pc 平台…win.mac,linux…
好厉害哇!
顶一下 牛
为什么这个在我的这边没有运行起来呢 登入后直接退出了 怎么个情况???
求教,刚开始看node-webkit,就碰到问题了。 我是mac os系统,按官网的意思是要先下个二进制的node-webkit,可是我下载双击后是一个类似chrome浏览器的窗口,然后在终端中输入nw app.js(这个是我在github上folk的代码) 为啥报 nw commond not defined啊。求入门指导。谢谢。
我已经回复你邮件了,你看下邮件
先顶,再问。请问如果用了数据库,那生成客户端的时候怎么办? 比如说做成了exe放到其他机器上安装能跑不?
当然能跑了,首先要看数据库是本地还是远程的,如果你部署的是远程数据库,exe只是个客户端就好办,如果要让客户也装数据库,就想办法先让他装数据库!
node-webkit已经用在生产环境的路过
什么项目??开源不??共享出来看看呗!
能不能给一下爬虫的代码看看?
我最近查了些资料,发现node-webkit有自带的数据库……详细可见:
https://github.com/rogerwang/node-webkit/wiki/Save-persistent-data-in-app
要是这样的话连mongoose模块都可以不用……
可以跑起来,赞一个。
有个问题请教下楼主,在我的node-webkit项目中只要我 require(‘mongoose’), nw.exe 马上就停止工作了,我看到楼主也用了mongoose ,不知有没有碰到我说的这种情况呢?
问题找到了,是mongoose版本的问题
楼主,闪退是怎么回事?
什么环境??之前没有闪退的问题啊,你的nodejs版本和node-webkit版本问题吧。
楼主写个教程呗。
- -我也发一个,春季期间无聊学习NW写的一个DEMO: blog.cn-face.com/wl 代码现在还没时间去整理。。。
楼主,我打包运行你的的代码 出现问题 Uncaught node.js Error
ReferenceError: $ is not defined at eval (file:///var/folders/xn/hz1gbcdd33jb2hvq1fgy1hc40000gn/T/.org.chromium.Chromium.LNjsuY/index.html:23:7) 这个怎么解,我是小白
根据你的描述,你已经使用Node.js和node-webkit(现在称为NW.js)实现了对某个论坛(坛子)的模拟客户端。你的应用主要通过爬虫来获取该论坛的数据,并且展示了如何将这些数据展示在用户界面上。
以下是一些关键步骤和代码片段,用于帮助理解和实现类似的功能:
1. 爬虫部分
为了从网页上抓取数据,我们可以使用axios
来发起HTTP请求,以及cheerio
来解析HTML文档。首先,你需要安装这两个库:
npm install axios cheerio
然后,可以创建一个简单的爬虫脚本来抓取数据:
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchForumData(username) {
const response = await axios.get(`https://example.com/user/${username}`);
const $ = cheerio.load(response.data);
// 假设用户信息位于这样的结构中
const avatarUrl = $('img.user-avatar').attr('src');
const posts = [];
// 假设所有帖子都在这种结构里
$('.post').each((index, element) => {
posts.push({
title: $(element).find('.post-title').text(),
link: $(element).find('.post-title a').attr('href'),
// 其他你需要的信息...
});
});
return { avatarUrl, posts };
}
2. 用户界面
使用NW.js,你可以创建一个本地的应用程序,它具有HTML、CSS和JavaScript的功能。这里是一个简单的HTML文件,用于显示抓取到的数据:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>论坛客户端</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<input id="username" type="text" placeholder="请输入用户名">
<button onclick="fetchAndDisplay()">加载数据</button>
<div id="data">
<!-- 数据将会被动态插入到这里 -->
</div>
<script src="app.js"></script>
</body>
</html>
在这个HTML文件中,fetchAndDisplay()
函数会调用爬虫脚本并更新UI:
function fetchAndDisplay() {
const username = document.getElementById('username').value;
fetchForumData(username).then(data => {
// 更新UI,显示数据
document.getElementById('data').innerHTML = `
<img src="${data.avatarUrl}" alt="用户头像">
<ul>
${data.posts.map(post => `<li><a href="${post.link}">${post.title}</a></li>`).join('')}
</ul>
`;
});
}
总结
这个例子展示了如何结合爬虫技术和NW.js来构建一个简单的本地论坛客户端。注意,实际项目中可能需要处理更多的细节,例如错误处理、性能优化等。此外,对于合法性和道德问题,请确保遵守目标网站的服务条款。