让我先说我不在乎这个解决方案是用什么语言编写的,只要它在 Windows 上运行。
我的问题是:有一个网站的数据经常更新,我想定期获取这些数据以供以后报告。该站点需要 JavaScript 才能正常工作,因此仅使用 wget 是行不通的。将浏览器嵌入程序或使用独立浏览器定期抓取屏幕以获取此数据的好方法是什么?
理想情况下,我想抓取页面上的某些表格,但如有必要可以使用正则表达式。
让我先说我不在乎这个解决方案是用什么语言编写的,只要它在 Windows 上运行。
我的问题是:有一个网站的数据经常更新,我想定期获取这些数据以供以后报告。该站点需要 JavaScript 才能正常工作,因此仅使用 wget 是行不通的。将浏览器嵌入程序或使用独立浏览器定期抓取屏幕以获取此数据的好方法是什么?
理想情况下,我想抓取页面上的某些表格,但如有必要可以使用正则表达式。
您可能可以使用诸如 Watir、Watin 或 Selenium 之类的 Web 应用程序测试工具来自动化浏览器以从页面中获取值。我以前做过这个来抓取数据,而且效果很好。
如果 JavaScript 是必须的,您可以尝试通过 ActiveX ( CreateObject("InternetExplorer.Application")
) 实例化 Internet Explorer 并使用它的Navigate2()
方法打开您的网页。
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate2 "http://stackoverflow.com"
页面完成加载(检查document.ReadyState
)后,您可以完全访问 DOM,并且可以使用任何方法来提取您喜欢的任何内容。
你可以看看美丽的汤 - 作为开源 python,它很容易编程。引用网站:
Beautiful Soup 是一个 Python HTML/XML 解析器,专为屏幕抓取等快速周转项目而设计。三个功能使其功能强大:
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.
我会推荐Yahoo Pipes,这正是它们的目的。然后,您可以将 yahoo 管道数据作为 RSS 提要获取,并随心所欲地使用它。
试试坏男孩。它旨在自动化您网站的系统测试,但您可能会发现它的正则表达式规则非常方便,可以满足您的需求。
如果您有 Excel,那么您应该能够将网页中的数据导入 Excel。
从数据菜单中选择导入外部数据,然后选择新建 Web 查询。
一旦数据在 Excel 中,您就可以在 Excel 中对其进行操作或以您可以在其他地方使用的格式(例如 CSV)输出它。
作为对 Whaledawg 建议的补充,我将建议使用 RSS 抓取应用程序(进行 Google 搜索),然后您可以获得漂亮的原始 XML 以编程方式使用而不是响应流。如果您想自己实现,甚至可能有一些开源实现会给您更多的想法。
我最近对这个话题做了一些研究。我找到的最好的资源是这篇 Wikipedia 文章,它提供了许多屏幕抓取引擎的链接。
我需要一些可以用作服务器并批量运行的东西,从我最初的调查来看,我认为Web Harvest作为一个开源解决方案是相当不错的,而且我也对Screen Scraper印象深刻,这似乎功能非常丰富,您可以将其与不同的语言一起使用。
还有一个名为Scrapy的新项目,尚未检查,但它是一个 python 框架。
您可以将 Perl 模块LWP与模块JavaScript一起使用。虽然这可能不是最快的设置,但它应该可以可靠地工作。不过,我绝对不会让这是你第一次涉足 Perl。