Cralwer-01-如何设计一个爬虫框架
创作背景
其实在此之前,自己也尝试过做过尝试。
而且做了两次,最后因为没有成为一个可高度复用的框架,而逐渐失去维护。
本篇整理下成熟工具的长处,结合自己失败的经验,为设计一款简单灵活的爬虫打下基础。
以前失败的教训
暂停的工具
crawl
poseidon
设计理念
为了初期的快速迭代,使用单个模块。
对于页面等,初期不要求。
初期可以只考虑单机,后期初步加入分布式的设...
2020-05-05 01:23:59 |
Crawl
Kotlin-14-委托
kotlin 委托
委托模式是软件设计模式中的一项基本技巧。
在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。
Kotlin 直接支持委托模式,更加优雅,简洁。
Kotlin 通过关键字 by 实现委托。
类委托
类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。
以下实例中派生类 Derived 继承了接口 Base ...
2020-05-02 08:28:32 |
Kotlin
Kotlin-13-对象表达式和对象声明
Kotlin 对象表达式和对象声明
Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。
对象表达式
实现匿名内部类
通过对象表达式实现一个匿名内部类的对象用于方法的参数中:
window.addMouseListener(object : MouseAdapter() {
override fun mouseCli...
2020-05-02 08:28:32 |
Kotlin
Kotlin-12-枚举类
Kotlin 枚举类
枚举类最基本的用法是实现一个类型安全的枚举。
枚举常量用逗号分隔,每个枚举常量都是一个对象。
enum class Color{
RED,BLACK,BLUE,GREEN,WHITE
}
枚举初始化
每一个枚举都是枚举类的实例,它们可以被初始化:
enum class Color(val rgb: Int) {
RED(0xFF0000),...
2020-05-02 08:28:32 |
Kotlin
Kotlin-11-泛型
泛型
泛型,即 “参数化类型”,将类型参数化,可以用在类,接口,方法上。
与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。
声明方式
声明一个泛型类:
class Box<T>(t: T) {
var value = t
}
创建类的实例时我们需要指定类型参数:
val box: Box<Int> = Bo...
2020-05-02 08:28:32 |
Kotlin
Kotlin-10-数据类和密封类
数据类
Kotlin 可以创建一个只包含数据的类,关键字为 data:
data class User(val name: String, val age: Int)
编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:
equals() / hashCode()
toString() 格式如 "User(name=John, age=42)"
componentN() f...
2020-05-02 08:28:32 |
Kotlin
Kotlin-09-拓展
Kotlin 扩展
Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。
扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。
扩展函数
扩展函数可以在已有类中添加新的方法,不会对原类做修改。
定义形式
扩展函数定义形式:
fun receiverType.functionName(params){
body
}
re...
2020-05-02 08:28:32 |
Kotlin
Kotlin-08-接口
Kotlin 接口
Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现:
interface MyInterface {
fun bar() // 未实现
fun foo() { //已实现
// 可选的方法体
println("foo")
}
}
ps: 对比 java8 的...
2020-05-02 08:28:32 |
Kotlin