1

让我先说我不在乎这个解决方案是用什么语言编写的,只要它在 Windows 上运行。

我的问题是:有一个网站的数据经常更新,我想定期获取这些数据以供以后报告。该站点需要 JavaScript 才能正常工作,因此仅使用 wget 是行不通的。将浏览器嵌入程序或使用独立浏览器定期抓取屏幕以获取此数据的好方法是什么?

理想情况下,我想抓取页面上的某些表格,但如有必要可以使用正则表达式。

4

10 回答 10

9

您可能可以使用诸如 Watir、Watin 或 Selenium 之类的 Web 应用程序测试工具来自动化浏览器以从页面中获取值。我以前做过这个来抓取数据,而且效果很好。

于 2008-11-05T16:02:38.593 回答
3

如果 JavaScript 是必须的,您可以尝试通过 ActiveX ( CreateObject("InternetExplorer.Application")) 实例化 Internet Explorer 并使用它的Navigate2()方法打开您的网页。

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate2 "http://stackoverflow.com"

页面完成加载(检查document.ReadyState)后,您可以完全访问 DOM,并且可以使用任何方法来提取您喜欢的任何内容。

于 2008-11-05T16:05:05.063 回答
2

你可以看看美丽的汤 - 作为开源 python,它很容易编程。引用网站:

Beautiful Soup 是一个 Python HTML/XML 解析器,专为屏幕抓取等快速周转项目而设计。三个功能使其功能强大:

  1. 如果你给它错误的标记,Beautiful Soup 不会窒息。它会生成一个解析树,其意义与您的原始文档大致相同。这通常足以收集您需要的数据并逃跑。
  2. Beautiful Soup 提供了一些用于导航、搜索和修改解析树的简单方法和 Pythonic 习惯用法:用于剖析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
  3. Beautiful Soup 自动将传入文档转换为 Unicode,将传出文档自动转换为 UTF-8。您不必考虑编码,除非文档未指定编码并且 Beautiful Soup 无法自动检测编码。然后你只需要指定原始编码。
于 2008-11-05T16:10:35.303 回答
1

If you are familiar with Java (or perhaps, other language that runs on a JVM such as JRuby, Jython, etc.), you can use HTMLUnit; HTMLUnit simulates a complete browser; http requests, creating a DOM for each page and running Javascript (using Mozilla's Rhino).

Additionally, you can run XPath queries on documents loaded in the simulated browser, simulate events, etc.

http://htmlunit.sourceforge.net

于 2008-11-05T18:07:14.817 回答
1

我会推荐Yahoo Pipes,这正是它们的目的。然后,您可以将 yahoo 管道数据作为 RSS 提要获取,并随心所欲地使用它。

于 2008-11-05T16:19:57.310 回答
0

试试坏男孩。它旨在自动化您网站的系统测试,但您可能会发现它的正则表达式规则非常方便,可以满足您的需求。

于 2008-11-05T16:07:31.503 回答
0

如果您有 Excel,那么您应该能够将网页中的数据导入 Excel。

从数据菜单中选择导入外部数据,然后选择新建 Web 查询。

一旦数据在 Excel 中,您就可以在 Excel 中对其进行操作或以您可以在其他地方使用的格式(例如 CSV)输出它。

于 2008-11-05T16:36:48.540 回答
0

作为对 Whaledawg 建议的补充,我将建议使用 RSS 抓取应用程序(进行 Google 搜索),然后您可以获得漂亮的原始 XML 以编程方式使用而不是响应流。如果您想自己实现,甚至可能有一些开源实现会给您更多的想法。

于 2008-11-05T16:44:46.560 回答
0

我最近对这个话题做了一些研究。我找到的最好的资源是这篇 Wikipedia 文章,它提供了许多屏幕抓取引擎的链接。

我需要一些可以用作服务器并批量运行的东西,从我最初的调查来看,我认为Web Harvest作为一个开源解决方案是相当不错的,而且我也对Screen Scraper印象深刻,这似乎功能非常丰富,您可以将其与不同的语言一起使用。

还有一个名为Scrapy的新项目,尚未检查,但它是一个 python 框架。

于 2009-01-02T21:22:28.857 回答
0

您可以将 Perl 模块LWP与模块JavaScript一起使用。虽然这可能不是最快的设置,但它应该可以可靠地工作。不过,我绝对不会让这是你第一次涉足 Perl。

于 2008-11-05T18:13:14.743 回答