【问题标题】:Whats the best screen scraping language? [closed]什么是最好的屏幕抓取语言? [关闭]
【发布时间】:2009-04-17 12:02:05
【问题描述】:

您好,我想创建一个桌面应用程序 (c# prob),用于抓取或操作第 3 方网页上的表单。基本上我在桌面应用程序的表单中输入我的数据,它会转到第 3 方网站,然后使用脚本或后台的任何内容,在那里输入我的数据(包括我的登录名)并为我单击提交按钮。我只是想避免加载浏览器!

在这方面没有做太多(任何!)工作我想知道像 perl、python、ruby 等脚本语言是否允许我这样做?或者干脆使用 c# 和 .net 完成所有的抓取?哪一个是最好的IYO?

我在想脚本可能需要从不同平台上的应用程序中挂钩到相同的脚本(例如 symbian 移动设备,我无法像桌面版本那样在 c# 中开发它)。

它不是网络应用程序,否则我不妨使用原始网站。我意识到这一切听起来毫无意义,但这种特定形式的自动化对我来说将是一个真正的节省时间。

【问题讨论】:

  • 这是一个关于网页抓取而不是屏幕抓取的问题。请重新标记它。
  • 添加了网页抓取标签。没有删除屏幕抓取标签。

标签: programming-languages screen-scraping web-scraping


【解决方案1】:

别忘了关注BeautifulSoup,强烈推荐。

例如,请参阅options-for-html-scraping。 如果您需要为此任务选择一种编程语言,我会说Python

更直接地解决您的问题,请参阅twill,一种用于 Web 浏览的简单脚本语言。

【讨论】:

    【解决方案2】:

    我使用 C# 进行抓取。请参阅有用的 HtmlAgilityPack 包。 对于解析页面,我使用 XPATH 或正则表达式。如果需要,.NET 也可以轻松处理 cookie。

    我编写了一个小类,它包含了创建 WebRequest、发送它、等待响应、保存 cookie、处理网络错误和重新传输等所有细节 - 最终结果是,对于大多数情况,我只需调用“GetRequest\PostRequest”并返回一个 HtmlDocument。

    【讨论】:

      【解决方案3】:

      您可以尝试使用 .NET HTML Agility Pack:

      http://www.codeplex.com/htmlagilitypack

      “这是一个敏捷的 HTML 解析器,它构建了一个读/写 DOM 并支持普通的 XPATH 或 XSLT(你实际上不必了解 XPATH 或 XSLT 就可以使用它,不用担心......)。它是一个 .NET 代码库,允许您解析“网络之外”的 HTML 文件。解析器非常容忍“现实世界”的格式错误的 HTML。对象模型与 System.Xml 的提议非常相似,但针对 HTML 文档(或流)。”

      【讨论】:

        【解决方案4】:

        C# 非常适合您的屏幕抓取需求。 .NET 的正则表达式功能非常好。但是,对于这样一个简单的任务,您将很难找到一种相对容易地不做您想做的事情的语言。考虑到您已经在使用 C# 进行编程,我会说坚持下去。

        内置的屏幕抓取功能也是一流的。

        【讨论】:

          【解决方案5】:

          我们将 Groovy 与 NekoHTML 结合使用。 (另请注意,您现在可以在 Google App Engine 上运行 Groovy。)

          这是 Keplar 博客上的一些示例,可运行代码:

          Better competitive intelligence through scraping with Groovy

          【讨论】:

            【解决方案6】:

            IMO Perl 内置的正则表达式功能和处理文本的能力使其成为屏幕抓取的一个很好的竞争者。

            【讨论】:

              【解决方案7】:

              Ruby 非常棒!... 试试它的 hpricot/mechanize

              【讨论】:

                【解决方案8】:

                Groovy 非常好。

                示例: http://froth-and-java.blogspot.com/2007/06/html-screen-scraping-with-groovy.html

                Groovy 和 HtmlUnit 也是很好的搭配: http://groovy.codehaus.org/Testing+Web+Applications Htmlunit 将模拟一个支持 Javascript 的完整浏览器。

                【讨论】:

                  【解决方案9】:

                  PHP 是一个很好的竞争者,因为它的 Perl-Compatible Regex supportcURL library. 很好

                  【讨论】:

                    【解决方案10】:

                    HTML Agility Pack (c#)

                    1. XPath 很糟糕,清理 html 以使其符合 xml 的方式会丢弃标签,您必须调整表达式才能使其正常工作。
                    2. 使用简单

                    Mozilla Parser (Java)

                    1. 可靠的 XPath 支持

                    2. 你必须先设置环境变量才能工作,这很痛苦

                    3. 在 org.dom4j.Node 和 org.w3c.dom.Node 之间进行转换以获得不同的属性是一个真正的痛苦

                    4. 死在非标准 html (0.3 修复此问题)

                    5. XPath 的最佳解决方案

                    6. 访问 NodeList 中节点上的数据时遇到问题

                      使用 for(int i=1;i

                    Beautiful Soup (Python)

                    我没有太多经验,但这是我发现的

                    1. 不支持 XPath
                    2. 很好的 html 路径界面

                    我更喜欢 Mozilla HTML Parser

                    【讨论】:

                      【解决方案11】:

                      查看 HP 的 Web 语言(以前称为 WEBL)。

                      http://en.wikipedia.org/wiki/Web_Language

                      【讨论】:

                        【解决方案12】:

                        或者坚持使用 C# 中的 WebClient 和一些字符串操作。

                        【讨论】:

                          【解决方案13】:

                          我支持 python(或 Beautiful Soup)的推荐。我目前正在使用 python 进行一个小型屏幕抓取项目,python 3 自动处理诸如 cookie 身份验证(通过 CookieJar 和 urllib)之类的事情大大简化了事情。 Python 支持您可能需要的所有更高级的功能(如正则表达式),并且具有能够快速处理此类项目的好处(在处理低级内容时不会产生太多开销)。它也是相对跨平台的。

                          【讨论】:

                            猜你喜欢
                            • 2010-09-12
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2012-03-16
                            • 1970-01-01
                            相关资源
                            最近更新 更多