如何刮网站,客户端或服务器端?

时间:2009-04-05 14:27:38

标签: .net asp.net javascript

我正在创建一个bookmarklet按钮,当用户在浏览器中单击此按钮时,将抓取当前页面并从此页面获取一些值,例如价格,项目名称和项目图像。

这些字段将是可变的,意味着获取这些值的逻辑对于每个域“amazon,ebay”都会有所不同。

我的问题是:

  • 我应该使用javascript来抓取这些数据然后发送到服务器吗?
  • 或者只是发送到我的服务器端的URL,然后使用.net代码来刮取值?
  • 最好的方法是什么?为什么它更好?优点,缺点?

观看此视频,您将了解我想要做的事情http://www.vimeo.com/1626505

5 个答案:

答案 0 :(得分:2)

如果您想从其他网站提取信息以便在您的网站(例如,用ASP.NET编写)中使用,那么您通常会在服务器端执行此操作,以便您拥有丰富的内容用于处理结果的语言(例如C#)。您将通过.NET中的WebRequest对象执行此操作。

客户端处理的主要用途是使用Javascript来提取您网站上显示的信息。一个例子是天气频道提供的脚本,用于在您的网站上显示一个小天气框,或者用于非常简单的操作,例如向收藏夹添加页面。

更新:Amr写道,他正在尝试重新创建一些流行的屏幕抓取软件的功能,这需要一些非常复杂的处理。 Amr,我考虑创建一个使用IE浏览器对象来显示网页的应用程序 - 这很简单。然后你可以拉出InnerHTML(我想,自从我实现了一个基于IE对象的程序已经有几年了)来检索页面的内容并做你的魔术。当然,您可以使用WebRequest对象(只需将其交给浏览器对象中使用的URL),但这样做效率不高,因为它会再次下载页面。

这就是你想要的吗?

答案 1 :(得分:1)

如果您只想使用JavaScript来执行此操作,除非您知道将要使用的每个站点的确切布局(否则它会很大),否则您可能会拥有一个相当大的书签。

我看到这样做的一种常见方法是在您自己的服务器上使用Web服务,您的bookmarklet(使用JavaScript)会重定向到一些参数,例如您正在查看的页面的URL。然后,您的服务器将抓取页面,并为您感兴趣的内容完成解析HTML的工作。

一个很好的例子是"Import to Mendeley"书签,它将您正在访问的页面的URL传递给其服务器,然后在该服务器中提取有关页面上列出的科学论文的信息并将其导入您的集合。

答案 2 :(得分:0)

我会在服务器端刮掉它,因为(我是Java人)我更喜欢静态语言,而不是动态脚本语言,所以保持后端的逻辑对我来说会更舒服。另一方面取决于你想要刮掉多少项,以及这种逻辑的复杂程度。也许这些值可以在JavaScript中使用单个id选择器进行解析,然后服务器端处理可能会过度。

答案 3 :(得分:0)

Bookmarklets是每个定义的客户端,但您可以让客户端依赖于服务器,但您的示例不提供足够的信息。你想用刮下的信息做什么?

答案 4 :(得分:0)

如果您在书架中包含抓取代码,则如果您包含新功能或错误修复,则用户必须更新其书签。做服务器端,所有用户立即获得新内容:)