12

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

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

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

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

4

13 回答 13

26

Do not forget to look at BeautifulSoup, comes highly recommended.

See, for example, options-for-html-scraping. If you need to select a programming language for this task, I'd say Python.

A more direct solution to your question, see twill, a simple scripting language for Web browsing.

于 2009-04-17T12:16:48.943 回答
6

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

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

于 2009-04-17T13:16:37.410 回答
4

C# is more than suitable for your screen scraping needs. .NET's Regex functionality is really nice. However, with such a simple task, you'll be hard to find a language that doesn't do what you want relatively easily. Considering you're already programming in C#, I'd say stick with that.

The built in screen scraping functionality is also top notch.

于 2009-04-17T12:10:10.377 回答
4

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

http://www.codeplex.com/htmlagilitypack

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

于 2009-04-17T13:30:15.333 回答
3

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

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

通过使用 Groovy 抓取来获得更好的竞争情报

于 2010-01-21T09:21:50.840 回答
2

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

于 2009-04-17T12:06:22.493 回答
2

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

于 2009-04-17T13:38:27.000 回答
2

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 的完整浏览器。

于 2009-04-18T17:13:04.573 回答
1

PHP is a good contender due to its good Perl-Compatible Regex support and cURL library.

于 2009-04-17T12:09:17.417 回答
1

HTML 敏捷包 (c#)

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

Mozilla 解析器 (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<=list_size;i++) 来解决这个问题

美丽的汤(Python)

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

  1. 不支持 XPath
  2. 路径 html 的漂亮界面

我更喜欢 Mozilla HTML 解析器

于 2009-04-24T16:36:21.400 回答
1

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

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

于 2010-12-03T18:23:01.053 回答
0

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

于 2009-04-17T13:34:39.940 回答
0

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

于 2009-04-29T07:30:12.840 回答