创建机器人/爬虫

时间:2013-01-02 22:57:25

标签: web-crawler dart

我想制作一个小机器人,以便在一些合作伙伴网站上自动和周期性地浏览。这将为这里的很多员工节省几个小时。

机器人必须能够:

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

上个月我尝试过dart并喜欢它... 我想用飞镖做。

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

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

1 个答案:

答案 0 :(得分:3)

这有两个部分。

  1. 从远程站点获取页面。
  2. 将该页面读入可以解析的类中。
  3. 对于第一部分,如果您计划运行此客户端,则可能会遇到跨站点问题,因为从服务器X提供的页面无法从服务器Y请求页面,除非正确标题设置。

    请参阅:CORS with Dart, how do I get it to work?Dart application and cross domain policy 或者有问题的网站需要返回正确的CORS headers

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

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

    您也可以使用HttpRequest.getWithCredentials。如果该网站有一些自定义登录,那么您可能会遇到问题(因为您可能需要将用户名和密码从您的网站发送到他们的服务器 -

    这是第二部分进入的时候。您可以使用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.
    
    }
    

    我猜测(之前没有写过蜘蛛)你想要在特定的位置/深度抽出特定的标签来总结你的结果,并在&lt; a&gt;中添加网址。超链接到机器人将导航到的队列。