2

我想制作一个小机器人,以便在一些合作伙伴网站上自动进行牙周冲浪。这将为这里的许多员工节省几个小时。

机器人必须能够:

  • 连接到该网站,其中一些以用户身份登录,访问和解析网站上的特定信息。
  • 该机器人必须集成到我们的网站并使用我们网站的数据更改其设置(使用的用户……)。最终它必须总结解析信息。
  • 最好此操作必须从客户端完成,而不是在服务器上。

我上个月试过飞镖,很喜欢……我想用飞镖来做。

但是我有点迷茫:我可以为每个要解析的网站使用 Document 类对象吗?可能是无头的还是我应该使用 chrome/dartium api 来控制网络浏览器(我想避免这种情况)?

我一直在阅读这个帖子:https ://groups.google.com/a/dartlang.org/forum/?fromgroups=#!searchin/misc/crawler/misc/TkUYKZXjoEg/Lj5uoH3vPgIJ 使用https://github。 com/dart-lang/html5lib对我来说是个好主意吗?

4

1 回答 1

3

这有两个部分。

  1. 从远程站点获取页面。
  2. 将页面读入一个可以解析的类。

对于第一部分,如果您计划运行此客户端,则可能会遇到跨站点问题,因为您的页面从服务器 X 提供,无法从服务器 Y 请求页面,除非设置了正确的标头.

请参阅:CORS 与 Dart,我如何让它工作? Dart 应用程序和跨域策略 或相关站点需要返回正确的CORS 标头

假设您实际上可以从远程站点客户端获取页面,您可以使用 HttpRequest 来检索实际内容:

// snippet of code...
new HttpRequest.get("http://www.example.com", (req) {
  // process the req.responseText
});

您也可以使用HttpRequest.getWithCredentials. 如果该站点有一些自定义登录,那么您可能会遇到问题(因为您可能不得不将您站点的用户名和密码 Http POST 到他们的服务器 -

这是第二部分的时候。您可以使用DocumentFragment.html(...)构造函数处理您的 HTML,它为您提供了一个可以迭代和递归的节点集合。下面的示例显示了一个静态 html 块,但您可以使用从HttpRequest上面返回的数据。

import 'dart:html';

void main() {
  var d = new DocumentFragment.html("""
    <html>
      <head></head>
      <body>Foo</body>
    </html>
  """);

  // print the content of the top level nods
  d.nodes.forEach((node) => print(node.text)); // prints "Foo"
  // real-world - use recursion to go down the hierarchy.

}

我猜(之前没有写过蜘蛛)你会想要在特定位置/深度提取特定标签以总结为你的结果,并将 <a> 超链接中的 url 添加到你的机器人将导航到。

于 2013-01-03T08:15:16.650 回答