English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Recentemente ho visto lo strumento di crawling Gecoo, sembra abbastanza semplice e utile, quindi scrivo un DEMO per testarlo, catturare il sito web
http://zj.zjol.com.cn/home.htmlCattura principalmente i titoli delle notizie e l'ora di pubblicazione come oggetto di test di recupero. La cattura dei nodi HTML avviene tramite la selezione dei nodi come un selettore jQuery, molto comodo, il codice Gecco utilizza principalmente annotazioni per implementare la corrispondenza dell'URL, sembra piuttosto semplice e bello.
Aggiungere dipendenze Maven
<dependency> <groupId>com.geccocrawler</groupId> <artifactId>gecco</artifactId> <version>1.0.8</version> </dependency>
Scrivere il recupero della pagina elenco
@Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines") public class ZJNewsGeccoList implements HtmlBean { @Request private HttpRequest request; @RequestParameter private int pageIndex; @RequestParameter private int pageSize; @HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a") private List<HrefBean> newList; }
@PipelineName("zJNewsListPipelines") public class ZJNewsListPipelines implements Pipeline<ZJNewsGeccoList> { public void process(ZJNewsGeccoList zjNewsGeccoList) { HttpRequest request=zjNewsGeccoList.getRequest(); for (HrefBean bean:zjNewsGeccoList.getNewList()){ //Entrare nella pagina dettaglio e catturare SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl())); } int page=zjNewsGeccoList.getPageIndex()+1; String nextUrl = "http://zj.zjol.com.cn/home.html?pageIndex="+page+"&pageSize=100"; //Cattura la pagina successiva SchedulerContext.into(request.subRequest(nextUrl)); } }
Scrivere la pagina dettaglio di cattura
@Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline") public class ZJNewsDetail implements HtmlBean { @Text @HtmlField(cssPath = "#headline") private String title ; @Text @HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray") private String createTime; }
@PipelineName("zjNewsDetailPipeline") public class ZJNewsDetailPipeline implements Pipeline<ZJNewsDetail> { public void process(ZJNewsDetail zjNewsDetail) { System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime()); } }
Funzione principale di avvio
public class Main { public static void main(String [] rags){ GeccoEngine.create() //Percorso del pacchetto del progetto .classpath("com.zhaochao.gecco.zj") //Indirizzo della pagina di inizio della cattura .start("http://zj.zjol.com.cn/home.html?pageIndex=1&pageSize=100") //Quante thread di cattura aprire .thread(10) //Intervallo tra una cattura e l'altra di ogni singolo catturatore .interval(10) //Usa userAgent del pc .mobile(false) //Inizia l'esecuzione .run(); } }
Risultato di cattura
Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento e che tu sostenga fortemente il tutorial di urla.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.