我想制作一个小机器人,以便在一些合作伙伴网站上自动和周期性地浏览。这将为这里的很多员工节省几个小时。
机器人必须能够:
上个月我尝试过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对我的案例是个好主意吗?
答案 0 :(得分: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;中添加网址。超链接到机器人将导航到的队列。