English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Récemment, j'ai vu l'outil de爬虫 Gecoo, qui semble assez simple et pratique, donc j'ai écrit un DEMO pour le tester et capturer le site web
http://zj.zjol.com.cn/home.html,principalement pour capturer les titres et les dates de publication des nouvelles en tant qu'objet de test de capture. La capture des nœuds HTML est très pratique, comme s'il s'agissait d'un sélecteur jQuery, et le code Gecco utilise principalement des annotations pour réaliser la correspondance d'URL, ce qui rend le code plus concis et beau.
Ajouter la dépendance Maven
<dépendance> <groupId>com.geccocrawler</groupId> <artifactId>gecco</artifactId> <version>1.0.8</version> </dépendance>
Écrire une page de liste de capture
@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()){ //Entrer dans la page de détails pour capturer 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"; //Capturer la page suivante SchedulerContext.into(request.subRequest(nextUrl)); } }
Écrire une page de capture de détails
@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()); } }
Lancer la fonction principale
public class Main { public static void main(String [] rags){ GeccoEngine.create() //Chemin du paquet du projet .classpath("com.zhaochao.gecco.zj") //Adresse de la page à commencer à capturer .start("http://zj.zjol.com.cn/home.html#63;pageIndex=1&pageSize=100") //Ouvrir plusieurs threads de crawlers .thread(10) //L'intervalle après chaque capture d'une requête par le crawler individuel .interval(10) //Utiliser userAgent du bureau .mobile(false) //Commencer à exécuter .run(); } }
Résultat de la capture
C'est tout pour cet article. J'espère que cela vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel d'encouragement.
Déclaration : Le contenu de cet article est issu du réseau, et appartient à ses auteurs respectifs. Le contenu est apporté par les utilisateurs d'Internet de manière volontaire et téléversé. Ce site ne détient pas de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de copyright, vous êtes invité à envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droit d'auteur.)