ZB-030-02从零开始爬虫

代码仓库

从零开始

  • Github-new
  • 新建项目
    • mvn archetype 使用骨架 2400+种选择
    • IDEA new 使用 ide创建
    • 从别人那里抄一个 (最常用)
  • .gitignore
  • README
  • 配置基本的代码质量检查插件
    • 越早代价越低 (保证代码质量)

开始写代码

001 github新建仓库

002 去 https://github.com/hcsp/read-write-files 里 把 src和 pom.xml抄过来

修改 .gitignore

1
2
3
4
5
*.iml
target/
.idea/

以上三个目录是不改被提交的

003 IDEA open项目 选择 我们的文件夹里的pom.xml

1
2
3
4
cp -r [你的clone目录]/read-write-files-master/.circleci  .

# 删除 .circleci/verifyWhitelist.sh
# 删除 .circleci/whitelist.txt

项目的设计流程-自顶向下 (团队))

  • 多人协作
  • 模块化
    • 各模块指责明确,界限清晰
    • 基本的文档
    • 基本的接口
  • 小步提交
    • 因为大的变更难以review
    • 因为大的变更冲突更加棘手

项目的设计流程-自低向上 (自己)

  • 单打独斗
    • 先实现功能
    • 在实现功能过程中不停的抽取公共部分
      • 每当写出很啰嗦的代码的时候,就该重构了
      • DRY:每当你复制/粘贴的时候,就该重构了
    • 通过重构实现模块化/接口化

项目的演进:可扩展性

  • 单线程->多线程
  • console -> H2 database
  • H2 database -> Elasticsearch

项目的演进:正确性

如何保证代码改动不会破坏原先的功能?

  • 测试

如何养成好的代码习惯

你都看不下去的代码

  • 不要妥协,你自己看代码都觉得说不过去。

项目目标

爬取新浪数据

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>

添加测试的依赖

1
2
3
4
5
6
7
8
9
10
11
12
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>

添加冒烟测试类SmokeTest.java

1
2
3
4
5
6
7
8
9
package com.github.hcsp;

import org.junit.jupiter.api.Test;

public class SmokeTest {
@Test
public void test(){
}
}

运行 mvn test 成功则提交我们的代码

  • 如果你不小心 git add .把你的 .idea目录add了
    • 你不想add的文件咋办? —> git reset HEAD .idea 取消它的 add
  • 如果你不小心 git add .把你的 .idea目录add了 而且还 commit了怎么办?
    • 第一个办法git reset HEAD~1 向后回滚一个提交
    • 第二个办法 IDEA里 version control 选择log 选择上一次提交 右键Reset Current Branch To Here
  • 如果你不小心 git add .把你的 .idea目录add了 而且还 commit了 甚至 git push了怎么办?
    • 由于我们现在只有一个 master ,所以你去看代码 应该有一个 不想提交的文件 .idea
      • 第一步 如果是在 master在你本地 git log 查看你刚刚提交的 id
      • 第二步 git revert id号 形如 git revert 05995e358c631ebdccc2f1fb34b5ff44719fc303
      • 它的缺点是会撤销刚才的提交,而且你之前的提交也没了
      • 如果你是在主干的化,建议直接把它删掉
    • 推荐的做法:
      • 先还原代码 git log 看所有提交id
      • git reset id号
      • git reset HEAD --hard
  • 实际操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
commit 了 还 push 了
如果是在自己的分支上,那就用同样的方式操作,并且 force push
否则,如果在主干上,或者你害怕不敢那么操作,老老实实把多提交的文件删掉


具体操作如下
git reset HEAD~1
# 修改 .gitignore 添加 .idea
git add .
git commit -m "我修改了刚刚的错误"
# 此时你看提交信息
git status
# 提示你如下内容
# 位于分支 master
# 您的分支和 'origin/master' 出现了偏离,
# 并且分别有 1 和 1 处不同的提交。
# (使用 "git pull" 来合并远程分支)

# 此时你直接 push 是 失败的
# 你只能 force
git push -f

修改 .circleci.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: 2
jobs:
test:
docker:
- image: circleci/openjdk:8u212-jdk-stretch
steps:
- checkout
- restore_cache:
key: hcsp-{{ checksum "pom.xml" }}
- run:
name: Run Maven tests
command: mvn clean test
- save_cache: # saves the project dependencies
paths:
- ~/.m2
key: hcsp-{{ checksum "pom.xml" }}
workflows:
version: 2
default:
jobs:
- test

提交

1
git add .

此时提交有个潜规则

IDEA点击 commit

提交信息内容

1
2
3
修改CI配置

使之能够在CircleCI上运行。

然后 push

CircleCI上添加项目

1
2
3
4
5
6
7
8
搜索 circleci
得到 https://circleci.com/
登录 用 github
右上角 go to app
add project > 选择你的项目 --》 set up Project ---> Start building
然后开始自动化测试

此后你每次 push代码的时候 都会自动 运行测试,保证代码正确性的不二选择

新开分支,提 PR 然后合并主分支

开分支

1
git checkout -b new-feature

此时,你去掉了代码里一段注释

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
public static void main(String[] args) throws IOException {
// String html = getIndexPage();
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("https://sina.cn/");
try (CloseableHttpResponse response1 = httpclient.execute(httpGet)) {
System.out.println(response1.getStatusLine());
HttpEntity entity1 = response1.getEntity();
System.out.println(EntityUtils.toString(entity1));
}
}
}

提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git add .
git commit -m "Remove comments"

git push
# 此时失败了 因为 远程没有你的新分支
git push --set-upstream origin new-feature

# 此时打开你的代码仓库
# 这时这个新的提交在仓库上显示了 点击 Compare & pull request

# 文本框里输入你的描述
在这里写你的新功能描述,等待CI检查通过,或者你的 team leader 的 code review.

# 点击 create pull request

# 测试通过之后 点击 merge pull request