English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Recientemente he visto la herramienta de rastreo de Gecoo, siento que es bastante simple y útil, por lo que escribo un DEMO para probar, capturar el sitio web
http://zj.zjol.com.cn/home.html,principalmente captura los títulos de las noticias y la hora de publicación como objetos de prueba de captura. La captura de nodos HTML se realiza mediante la selección de nodos de manera similar a los selectores de jQuery, lo que es muy conveniente. El código de Gecco principalmente utiliza anotaciones para implementar la coincidencia de URL, lo que parece más simple y atractivo.
Agregar dependencia de Maven
<dependency> <groupId>com.geccocrawler</<groupId> <artifactId>gecco</<artifactId> <version>1.0.8</version> </dependency>
Escribir página de captura de lista
@Gecco(matchUrl = "http://zj.zjol.com.cn/home.html#63;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()){ //Entrar a la página de detalles para capturar 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#63;pageIndex="+page+"&pageSize=100"; //Capturar la siguiente página SchedulerContext.into(request.subRequest(nextUrl)); } }
Escribir detalles de captura de página
@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()); } }
Iniciar la función principal
public class Main { public static void main(String [] rags){ GeccoEngine.create() //Ruta del paquete del proyecto .classpath("com.zhaochao.gecco.zj") //Dirección de la página donde se comenzará a capturar .start("http://zj.zjol.com.cn/home.html#63;pageIndex=1&pageSize=100") //Abrir varios hilos de rastreadores .thread(10) //El tiempo de intervalo después de que cada rastreador captura una solicitud .interval(10) //Usar userAgent del escritorio .mobile(false) //Comience a ejecutar .run(); } }
Resultados de la captura
Esto es todo el contenido del artículo, esperamos que haya sido útil para su aprendizaje y que todos nos apoyen en el tutorial de alarido.
Declaración: El contenido de este artículo se obtiene de la red, pertenece al propietario original, se contribuye y carga espontáneamente por los usuarios de Internet. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.