我学Rust_4_第一次重构笔记

2018-03-21
昨天调整了整个lib.rs的函数结构,除了数据库的保存没做好,其它都通过运行了
有900行代码了,感觉太乱,太杂,想分开文件来做,查看了一下别人的rust文件的mod和文件系统
想模仿一下,分开管理。
http://wiki.jikexueyuan.com/project/rust/creates-and-modules.html 箱和模块
https://photino.gitbooks.io/rust-notes/module-system.html 模块系统


2018-03-27
终于改好了第一个分工程模块的爬虫版本,很粗糙。
src文件夹的文件如下:
│  lib.rs
│  main.rs

└─ crawler_mov
        config.rs
        crawler.rs
        database.rs
        data_structur
        mod.rs
        scraper.rs
        spider.rs


设计是这样的:
lib.rs是已经实现了完整的抓取搜索网页结果,info的json和相关资源及其json,
初步的数据库连接和创建各种表。就不去动lib.rs了,现在是重构lib.rs


lib.rs实现的是单线程做法,考虑到以后会使用GUI,网页,CLI等客户端,还是需要用多线程来跑搜索,
爬虫放出去,能不断返回爬取到的结果,客户端收到消息就可以刷新界面,也能发控制命令例如停止命令给爬虫。
百度了crawler,spider,scraper,的区别,确定下来大家的职责是:
crawler控制不同的spider进行爬取整个网站,会根据spider返回的内容派遣不同的spide进行下一层的爬取,把spider爬取到的结果进行进一步处理例如存入数据库或返回给调用自己的上一级;
spider是专职的对于一个类型的链接进行爬取,爬完单个网页,如果链接里还有自己可以处理的类型,就一直爬取下去,直至没有就停止爬取;
scraper是对于spider爬取到的内容进行提取处理结构化,返回给spider,spider集合起来,返回给crawler。


确定了这些,就是要用通道channel来进行消息传送了,用delegate或trait对于多线程数据的传送都不是那么理想。
瞎设计的结论是:crawler,spider,都是一个函数搞定,参数给与返回结果的通道和接收命令的通道。
由调用者决定是否新开线程执行函数。


因此,最简单的只爬取搜索结果页面的所有id的分模块是:
scraper.rs 的功能:把传送进来的 Document 内容进行查找需要的节点,把内容提取出来,返回给 spider;

spider.rs 的功能:1,把传送进来的 URL 和 页面序号组合后获取网页Document,让scraper提取里面的id列表,发送给通道传送给crawler;2,把页面序号加一,继续步骤1,循环爬取,直至获取到的网页提取不到id出来才停止;

crawler.rs 的功能:把传送进来的关键字,类型,排序条件组合成url,开通道和线程,调用spider去爬取id列表;
                   循环读取通道内容,直至收到一个内容为空的列表才停止;
main.rs 的功能: 开启线程,调用crawler爬取id列表;
                 循环读取通道内容,把读到的内容让一个函数进行处理;
直至收到一个内容为空的列表才停止;
也可通过通道发送一个true值,作为停止命令,让crawler中止运行。
拆分了模块:
data_stucture.rs   负责数据结构
database.rs 负责数据库相关
config.rs 负责程序的参数设置


插个话题:
rust语言怎么把已经打印出来的文字覆盖掉?
https://www.zhihu.com/question/64009085/answer/215615845


做好 Doc 做好 Test,
      database.rs 要做好工作,把功能用trait的方式做出来,要用 enum的形式固定sql的类型,根据类型和版本来获取sql语句
      data_structur.rs 要提供元祖,把固定的东西直接pub 提供出来,对应enum static提供出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值