English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
最近、Gecooスパイダーツールを簡単で使いやすいと感じ、DEMOを作成してサイトをスクレイピングテストしました。
http://zj.zjol.com.cn/home.html,主にニュースのタイトルと公開日をスクレイピングテストオブジェクトとして採用。HTMLノードはJqueryセレクタのように選択するのが非常に便利で、GeccoコードはURLマッチングを実現するためにアノテーションを利用して簡潔で美しいように見えます。
Maven依存関係の追加
<dependency> <groupId>com.geccocrawler</<groupId> <artifactId>gecco</<artifactId> <version>1.0.8</version> </dependency>
リストページのスクレイピングを記述
@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()){ //进入详情页面抓取 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"; //抓取下一页 SchedulerContext.into(request.subRequest(nextUrl)); } }
编写抓取详情页面
@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()); } }
メイン関数を起動
public class Main { public static void main(String [] rags){ GeccoEngine.create() //プロジェクトのパッケージパス .classpath("com.zhaochao.gecco.zj") //キャプチャーを開始するページのURL .start("http://zj.zjol.com.cn/home.html#63;pageIndex=1&pageSize=100") //何つのスパイダースレッドを開始するか .thread(10) //個別のスパイダーが1つのリクエストをキャプチャーした後のインターバル時間 .interval(10) //PC端のuserAgentを使用 .mobile(false) //開始運行 .run(); } }
キャプチャー結果
これでこの記事のすべてが終わりです。皆様の学習に役立つことを願っています。また、呐喊チュートリアルを多くの人がサポートしてくれることを願っています。
声明:この記事の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードした内容であり、このサイトは所有権を持ちません。人工的な編集は行われていません。また、関連する法的責任を負いません。著作権侵害を疑う内容があれば、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メールを送信する際には、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認が取れたら、このサイトは即座に侵害疑いのコンテンツを削除します。)