如何使用 node.js 和 javascript 模仿 Facebook 的“链接共享”功能
Posted
技术标签:
【中文标题】如何使用 node.js 和 javascript 模仿 Facebook 的“链接共享”功能【英文标题】:How to mimic Facebook's "link share" functionality using node.js and javascript 【发布时间】:2011-08-05 03:40:38 【问题描述】:所以我想模仿的是 Facebook 提供的链接共享功能。您只需输入 URL,然后 FB 会自动从目标网站获取图像、标题和简短描述。如何使用 node.js 和其他可能需要的 javascript 库在 javascript 中对此进行编程?我找到了一个使用 php 的 fopen 函数的例子,但我不想在这个项目中包含 PHP。
我问的是网页抓取的例子吗?我需要做的就是从目标网站的元标记中检索数据,然后还使用 CSS 选择器获取图像标记吗?
如果有人能指出我正确的方向,那将不胜感激。谢谢!
【问题讨论】:
从这里开始:blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs 【参考方案1】:是的,需要网络抓取,这很容易。困难的部分是查找标题和相关文本和图像的通用算法。
如何抓取
您可以使用 jsdom 在您的服务器中下载并创建一个 DOM 结构,然后在您的服务器上使用 jquery 抓取该结构。您可以按照上面@generalhenry 的建议在blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs 找到一个很好的教程。
刮什么
我想找到标题的好方法是:-
var h;
for(var i=6; i<=1; i++)
if(h = $('h'+i).first())
break;
现在h
将有标题或undefined
如果失败。替代方法可以简单地获取页面的title
标签。 :)
至于图片。列出该页面上所有或前几张相当大的图像,即过滤掉用于按钮、箭头等的精灵。
在获取远程数据时,请确保 ProcessExternalResources
标志已关闭。这将确保广告的脚本标签不会污染获取的页面。
是的,相关文本将在h
之后的某些标签中。
【讨论】:
感谢您的回复。那么为什么下面的代码不能获取元数据呢。 var meta=$('meta[name="description"]').attr("content");这不是读取 $() jquery 函数中的元元素吗?【参考方案2】:查看THIS 的帖子。它讨论了使用 node.js 进行抓取。 HERE 你以前有很多关于使用 javascript 和 jquery 抓取的信息。
也就是说,Facebook 实际上并没有猜测标题、描述和预览是什么,他们(至少在大多数情况下)从希望更容易被 fb 用户访问的站点中的元标记中获取这些信息。
也许您可以利用现有的元数据来提取标题、描述和 img 预览。可用元数据的文档是HERE。
【讨论】:
是的,如果页面有 opengraph 元数据,这将有所帮助。在其他情况下,我们需要使用一些启发式方法。 是的,感谢两位的回答。我正在寻找更多关于如何处理它的详细计划,因为我已经阅读了所有列出的教程和指南——我确实做了我的研究。通过查看示例代码,我学得最好。有人可以将我链接到一些使用 javascript 完成类似操作的代码吗?你如何抓取页面上的 html 标签? 另外,我想知道屏幕抓取和网页抓取有什么区别。我想要做的事情需要 AJAX 吗?我读过很多帖子提到由于安全问题,AJAX 无法从其他域的网站检索数据。 @Ern 我之前实际上没有进行过抓取,抱歉,没有代码可以分享。关于AJAX,它不是必需的,相反,正如您所说,甚至不可能通过AJAX进行跨站点请求。所以你应该在服务器端进行所有的抓取。出于可用性目的,您始终可以在演示文稿中添加 AJAX 层(即向服务器端代码发出 AJAX 请求以执行抓取、检索结果并呈现它们),但实际抓取始终在服务器端完成。跨度>以上是关于如何使用 node.js 和 javascript 模仿 Facebook 的“链接共享”功能的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript 和 Node.js 将捕获的图像存储到 MySQL 数据库中
如何使用 node.js 在服务器端使用纯 JavaScript 读取 JSON 文件?