java 爬蟲大型教程(一)

程式設計師duke發表於2019-01-24

java 爬蟲大型教程(一)

寫在開始前,既然是大型教程,那就從最初始的環境變數開始搭建說起。

電腦環境:我的電腦是macbook pro,因此係統環境變數配置是和Windows不一樣的,如果你的電腦是Windows系統,可以百度下相關環境變數配置。

爬蟲框架:使用的是webmagic,這是國內不錯的爬蟲框架,借鑑於python的scrapy框架。

Java環境搭建

首先提一句,從2019年1月開始更新的版本,jdk8 u201開始對公司使用者來說是收費的!!!因此如果你的公司沒有向oracle申請購買的話,一定要使用jdk8 u191及其以下的jdk版本,不然oracle是可以告你的公司的哦。當然,如果你是個人學習用的話,那就隨便了。

首先我列一下jdk8 u191的下載地址,記得儲存好。地址:

https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

Java的下載安裝配置就不說了,實在太基礎了,安裝成功後.

MacBook-Pro:~ duke$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

maven環境搭建

1.下載安裝包

官方下載地址:https://maven.apache.org/download.cgi

如圖:
maven-1

2.解壓指定位置

你可以把maven解壓至任何地方,這裡我把maven放在了/Users/duke/Documents/Software 這個資料夾裡,解壓命令不需多言。

我只簡單的描述一下maven,Java程式執行需要各種各樣的jar包,你可能要費心費力的去處理jar包和環境配置問題,但是使用maven就可以解決這個問題。如果你使用過git,就知道程式碼首先是要commit本地倉,然後在push到git遠端倉。maven是相同的道理,它會有個本地倉,如果java程式碼中使用了相關jar包,會首先在本地倉尋找,如果沒找到,會向遠端倉請求,下載到本地倉供使用。

3.環境配置

① 開啟終端 ,輸入vim ~/.bash_profile
② 輸入i進入編輯模式,然後輸入 Maven 的環境變數
export M2_HOME="/Users/duke/Documents/Software/apache-maven-3.6.0"
export PATH="$M2_HOME/bin:$PATH"
③ 編輯完後,按 esc 退出編輯,並輸入 :wq 儲存並退出。
④ 輸入 source ~/.bash_profile 使環境變數生效。
⑤ 輸入 mvn -v 檢視 Maven 否安裝成功。

maven-2

4.更換maven下載源

① 用IDEA或Eclipse開啟/Users/duke/Documents/Software/apache-maven-3.6.0/conf/settings.xml
② 找到mirrors元素(150行左右), 在它裡面新增子元素mirror
<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

maven-3

IDEA使用maven建立簡單的爬蟲專案

第一步:只是想使用maven來下載相關包,所以不用選中create from archetype,點選next,如下圖:
maven-4

第二步:GroupId(一般填反轉後公司域名)和ArtifactId(專案名)還有Version,這三個屬性目的是標識你的專案的唯一性,點選next,如下圖:

maven-5

第三步:以上配置按需修改,一般保持預設,很簡單就是儲存專案的路徑,點選Finish,如下圖:
maven-6

第四步:在接下來的皮膚中選擇本地的maven/Users/duke/Documents/Software/apache-maven-3.6.0

(如果是第一次建立專案,會有預建立過程,控制檯會顯示在從阿里雲下載模版,去喝杯咖啡等待即可)

第五步:進入了首頁,原始狀態如下圖:

maven-7

第六步:新增座標:

   <properties>
    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
	</properties>

	<dependencies>
        
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-core</artifactId>
            <version>0.7.3</version>
        </dependency>

        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-extension</artifactId>
            <version>0.7.3</version>
        </dependency>

        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-extension</artifactId>
            <version>0.7.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

然後點選右下角import changes,載入完成後,右下角import changes消失,如下圖:
maven-8

第七步:配置log4j.properties

我按照我的習慣,新建一個config資料夾,將其標記為source root

maven-9

配置log4j

# priority  :debug<info<warn<error
#you cannot specify every priority with different file for log4j 
#log4j.rootLogger=debug,stdout,info,debug,warn,error
#按照你的需要將輸出日誌等級
log4j.rootLogger=warn,error  

#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
#info log
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.info.File=./log/info.log
log4j.appender.info.Append=true
log4j.appender.info.Threshold=INFO
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#debug log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.debug.File=./log/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#warn log
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.warn.File=./log/warn.log
log4j.appender.warn.Append=true
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#error
log4j.logger.error=error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.error.File = ./log/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n

新建log資料夾存放日誌(這只是本地測試,如果生產中可以將其流入elk)

ok,所有配置完成,可以書寫爬蟲程式碼了!

相關文章