上一篇:Java網絡爬蟲實操(5)html
你們好,前幾篇文章一直提到用xpath去解析html。因爲是演示代碼,因此看上去都簡潔明瞭的。其實在生產環境下,咱們須要獲取的數據每每不是一點點,如何讓獲取數據的代碼寫的更加清晰、優雅呢?java
本篇文章嘗試用註解的方式實現一下,你們看看是否好一點。git
package com.cv4j.netdiscovery.example;
import com.cv4j.netdiscovery.core.domain.Page;
import com.cv4j.netdiscovery.core.parser.Parser;
import java.util.List;
public class TestParser implements Parser {
@Override
public void process(Page page) {
//最新網申
List<String> newApplyList = page.getHtml().xpath("//dl[@id='dlFull']/dd/div/div/p[@title]/a/text()").all();
page.getResultItems().put("newApplyList", newApplyList);
//最新實習
List<String> newWorkList = page.getHtml().xpath("//dl[@id='dlPart']/dd/div/div/p[@title]/a/text()").all();
page.getResultItems().put("newWorkList", newWorkList);
}
}
複製代碼
package com.cv4j.netdiscovery.example;
import com.cv4j.netdiscovery.core.domain.Page;
import com.cv4j.netdiscovery.core.parser.AnnotationParser;
import com.cv4j.netdiscovery.core.parser.annotation.ExtractBy;
import java.util.List;
public class TestParser extends AnnotationParser {
//最新網申
@ExtractBy.XPath("//dl[@id='dlFull']/dd/div/div/p[@title]/a/text()")
private List<String> newApplyList;
//最新實習
@ExtractBy.XPath("//dl[@id='dlPart']/dd/div/div/p[@title]/a/text()")
private List<String> newWorkList;
@Override
public void process(Page page) {
super.process(page); //這行代碼不能缺
//process裏一行代碼也不用寫,在上面經過註解就能夠獲取咱們要的數據了
}
}
複製代碼
總之,一個好的框架的目標是但願能用的前提下,用的更好、更爽。好像汽車品牌同樣,雖然都是四個輪子的,幾萬的也有,幾十萬的也不少。github
有興趣的小夥伴能夠關注這個爬蟲框架NetDiscovery,基本上每週都有更新的。bash
下一篇:Java網絡爬蟲實操(7)網絡