Flutter爬虫框架开发,把爬虫放在手机上跑~

优采云 发布时间: 2020-08-10 23:14

  最近做毕设须要大量数据训练模型,很多网站又要反爬机制,得爬一会停一会,所以非常慢,要是我用笔记本24小时爬虫很费电了,于是想到借助手机~

  然后就想到flutter,安卓苹果旧手机都能借助上去做数据采集

  ok,然后就开始做,折腾了三天做了一个大约的框架。总算可以便捷的添加爬虫任务了,集成了配置、日志、数据持久化这种基本的功能,然后封装网路恳求、网页解析的功能,用上去挺好。

  只不过众所周知的,dart是一种单线程语言,虽说提供了isolate机制,但是不能共享显存,用上去缚手缚脚的,然后flutter还禁用了反射!谷歌团队真是牛逼,我折腾了一晚上以后被这辣鸡玩意气到了,索性弃坑了。

  想要实现多线程爬虫的话看来应当是要写一部分原生代码才行,那我还不如全部用原生。。。

  (ps:放着好好的Android原生不用,用哪些辣鸡flutter做爬虫?? 秀逗了啊,气死我了)

  app截图

  系统构架

  画了几个图

  SpiderTask基类,所有爬虫类都从这个类派生,SpiderTask内自己维护一个TaskConfig任务配置对象和一个日志对象。如下图:

  至于数据持久化的,我用了另外一个类,采用单例模式,在app启动的时侯初始化。

  工作流程 在home里的任务列表中注册爬虫任务 启动app后在主页面管理各个爬虫任务 选择一个任务启动 步入详情页面会手动与爬虫任务的logging对象进行绑定,可以看见日志输出 简单的事例

  写一个简单的事例,运行后会爬取CN Radio网站的新闻。

  import 'package:flutter/src/widgets/framework.dart';

import 'package:flutter_spider_fx/framework/index.dart';

class CNRadioNewsSpider extends SpiderTask {

var url = 'http://news.cnr.cn/';

CNRadioNewsSpider(BuildContext context) : super(context, 'CNRadioNewsSpider');

@override

start() async {

super.start();

var dom = await CatHttp.getDocument(url, encoding: 'gb2312');

var links = dom.querySelectorAll('.contentPanel .lh30 a');

links.forEach((link) {

logging.debug(link.attributes['href']);

logging.info(link.text);

});

}

}

  框架代码

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线