如何以编程方式定期从网站获取内容?

时间:2008-11-05 16:00:04

标签: automation

让我先说一下,只要它在Windows上运行,我不关心这个解决方案的语言。我的问题是这个。有一个网站的数据经常更新,我希望定期获取以便以后报告。该网站需要JavaScript才能正常工作,因此只使用wget不起作用。在程序中嵌入浏览器或使用独立浏览器定期搜索此数据的屏幕有什么好方法?理想情况下,我想抓住页面上的某些表格,但如果需要,可以使用正则表达式。

10 个答案:

答案 0 :(得分:9)

您可以使用Watir,Watin或Selenium等Web应用程序测试工具自动化浏览器以从页面获取值。我以前用它来抓取数据,而且效果很好。

答案 1 :(得分: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,并可以使用任何方法提取您喜欢的任何内容。

答案 2 :(得分:2)

你可以看一下Beautiful Soup - 开源python,很容易编程。引用网站:

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

  1. 如果给你不好的标记,美丽的汤不会窒息。它产生一个解析树,使其与原始文档几乎一样有意义。这通常足以收集您需要的数据并逃跑。
  2. Beautiful Soup提供了一些简单的方法和Pythonic习语,用于导航,搜索和修改解析树:用于剖析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
  3. Beautiful Soup会自动将传入的文档转换为Unicode,将传出的文档转换为UTF-8。您不必考虑编码,除非文档没有指定编码并且Beautiful Soup不能自动检测编码。然后你只需要指定原始编码。

答案 3 :(得分:1)

我会推荐Yahoo Pipes,这正是他们要做的。然后,您可以将yahoo管道数据作为RSS源进行处理,并按照您的需要进行操作。

答案 4 :(得分:1)

如果您熟悉Java(或者可能是在JVM上运行的其他语言,如JRuby,Jython等),您可以使用HTMLUnit; HTMLUnit模拟完整的浏览器; http请求,为每个页面创建一个DOM并运行Javascript(使用Mozilla的Rhino)。

此外,您可以对模拟浏览器中加载的文档运行XPath查询,模拟事件等。

http://htmlunit.sourceforge.net

答案 5 :(得分:0)

尝试Badboy。它旨在自动化您的网站的系统测试,但您可能会发现它的正则表达式规则足以满足您的需求。

答案 6 :(得分:0)

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

从Data菜单中选择Import External Data,然后选择New Web Query。

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

答案 7 :(得分:0)

根据Whaledawg的建议,我打算建议使用RSS scraper应用程序(进行Google搜索),然后你可以获得不错的原始XML,以编程方式使用而不是响应流。甚至可能有一些开源实现,如果你想自己实现,它会给你更多的想法。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

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