Run Crawlers on Your Phone! A First Look at a Flutter Crawler Framework~
Recently I needed a lot of data to train models for my graduation project. Many sites also have anti-crawling mechanisms, so I have to crawl for a while then pause, which makes it extremely slow. Running a crawler on my computer 24 hours a day would use too much electricity, so I thought of using my phone~ Then I thought of Flutter—old Android and Apple phones can all be put to use for data collection. ok, then I started building. After a day of tinkering I put together a rough framework. Finally I can conveniently add crawler tasks. It integrates basic features like config, logging, and data persistence, then wraps network requests and webpage parsing. It works reasonably well. Except, as everyone knows, dart
目录6 个章节
Recently I needed a lot of data to train models for my graduation project. Many sites also have anti-crawling mechanisms, so I have to crawl for a while then pause, which makes it extremely slow. Running a crawler on my computer 24 hours a day would use too much electricity, so I thought of using my phone~
Then I thought of Flutter—old Android and Apple phones can all be put to use for data collection.
ok, then I started building. After a day of tinkering I put together a rough framework. Finally I can conveniently add crawler tasks. It integrates basic features like config, logging, and data persistence, then wraps network requests and webpage parsing. It works reasonably well.
Except, as everyone knows, Dart is a single-threaded language. Although it provides an isolate mechanism, it can't share memory, so using it feels like having your hands tied. And Flutter even disabled reflection! The Google team is really something. After an afternoon of struggling I got so pissed off by this piece of junk that I simply abandoned the project.
If I want to implement a multi-threaded crawler, it looks like I'd have to write some native code anyway, in which case I might as well go fully native...
(ps: Why use this junk Flutter for crawling when perfectly good Android native is sitting there?? I must have gone nuts. So pissed off.)

App Screenshots

System Architecture
Drew a few diagrams

The SpiderTask base class. All crawler classes derive from this class. SpiderTask itself maintains a TaskConfig task configuration object and a logging object. As shown below:

As for data persistence, I used another class with the singleton pattern, initialized when the app starts.

Workflow
- Register crawler tasks in the task list on the home page
- After launching the app, manage each crawler task on the main page
- Select a task and start it
- Entering the detail page automatically binds to the crawler task's logging object so you can see log output
A Simple Example
Here's a simple example. When run, it crawls news from the CN Radio website.
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);
});
}
}
Framework Code
For more details, you can check out the project code on GitHub~
Project URL: https://github.com/Deali-Axy/flutter_spider_fx
One last thing: junk Flutter. Don't blindly worship Google's tech. This thing is still a trap right now. Fine for writing a simple GUI to do CRUD, but don't even think about advanced stuff.

Welcome to Chat
For questions, please leave a message on the WeChat official account backend. I'll reply to every message~
- WeChat official account: 画星星高手
- Coding livestream: https://live.bilibili.com/11883038
- Zhihu: https://www.zhihu.com/people/dealiaxy
- Column: https://zhuanlan.zhihu.com/deali
- Jianshu: https://www.jianshu.com/u/965b95853b9f
_EOF_
Run Crawlers on Your Phone! A First Look at a Flutter Crawler Framework~
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
有模有样解决Flutter里Webview无法访问HTTP页面的问题
探索过程 Android9(好像是吧)开始谷歌就默认不让开发者访问不安全HTTP内容了,如果非要用HTTP,那必须在networkSecurityConfig里配置cleartextTrafficPermitted才行。谷歌这个设计的出发点本是好的,HTTPS固然更安全咱都懂,但有时候这个后端接口你选择不了要HTTP还是HTTPS,比如要使用没有提供HTTPS的第三方服务,或者是本文的这种情况:在
2021-12-18 · Flutter · 约 1 分钟
Flutter编译失败:java-nio-file-NoSuchFileException--build-app-intermediates
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:mergeExtDexDebug'. A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$Acti
2021-12-18 · Flutter · 约 1 分钟
Windows上怎么配置flutter开发环境?这篇文章手把手教你
前言 在Windows上做开发,一个字:坑。 但是有时候外出只能带着笔记本,Linux在一些笔记本上不太兼容,驱动支持不完美,而且电源管理不够好,所以无奈的情况下只能用Windows暂时顶一下,就像现在我要在Windows上搭建Flutter的开发环境一样,太坑了。 进入正题 先安装Android SDK 首先,你要有一种可以下载到Android SDK的方式,可以是梯子,或者是国内镜像,具体我就
2023-03-05 · Flutter · 约 1 分钟
Flutter播放音乐简单解决方案-AudioPlayers-与填坑
目前flutter播放音乐好像只搜到AudioPlayers这个解决方案,我照着他的文档来,确实是可以播放音乐的。 项目主页:https://pub.flutter-io.cn/packages/audioplayers AudioCache介绍:https://github.com/luanpotter/audioplayers/blob/master/doc/audio_cache.md An
2021-12-18 · Flutter · 约 1 分钟
讨论
共 0 条加载评论中…