From 6dc88fa111b273b01694eca37cac8f5daba3fe14 Mon Sep 17 00:00:00 2001 From: "yihua.huang" Date: Sat, 8 Jun 2013 20:48:27 +0800 Subject: [PATCH] split modules --- webmagic-core/pom.xml | 105 ++++++++++++++ .../java/us/codecraft/webmagic}/Page.java | 6 +- .../java/us/codecraft/webmagic}/Request.java | 6 +- .../java/us/codecraft/webmagic}/Site.java | 2 +- .../java/us/codecraft/webmagic}/Spider.java | 19 ++- .../webmagic}/downloader/Downloader.java | 8 +- .../downloader/HttpClientDownloader.java | 14 +- .../webmagic}/downloader/HttpClientPool.java | 4 +- .../webmagic}/pipeline/ConsolePipeline.java | 8 +- .../webmagic}/pipeline/FilePipeline.java | 10 +- .../webmagic}/pipeline/Pipeline.java | 6 +- .../webmagic}/processor/PageProcessor.java | 6 +- .../processor/SimplePageProcessor.java | 8 +- .../schedular/FileCacheQueueSchedular.java | 6 +- .../webmagic}/schedular/QueueSchedular.java | 6 +- .../webmagic}/schedular/Schedular.java | 6 +- .../us/codecraft/webmagic}/selector/Html.java | 4 +- .../webmagic}/selector/PlainText.java | 2 +- .../webmagic}/selector/RegexResult.java | 2 +- .../webmagic}/selector/RegexSelector.java | 2 +- .../webmagic}/selector/ReplaceSelector.java | 2 +- .../webmagic}/selector/Selectable.java | 2 +- .../webmagic}/selector/Selector.java | 2 +- .../webmagic}/selector/SelectorFactory.java | 2 +- .../selector/SmartContentSelector.java | 2 +- .../webmagic}/selector/XpathSelector.java | 2 +- .../codecraft/webmagic}/utils/UrlUtils.java | 2 +- .../src}/main/resources/log4j.xml | 0 .../java/us/codecraft/webmagic}/HtmlTest.java | 4 +- .../us/codecraft/webmagic}/SpiderTest.java | 14 +- .../samples/DiandianBlogProcessor.java | 8 +- .../samples/DianpingBlogProcessor.java | 8 +- .../samples/DiaoyuwengProcessor.java | 8 +- .../webmagic}/samples/F58PageProcesser.java | 8 +- .../webmagic}/samples/HuxiuProcessor.java | 8 +- .../webmagic}/samples/KaichibaProcessor.java | 8 +- .../webmagic}/samples/MeicanProcessor.java | 8 +- .../webmagic}/samples/NjuBBSProcessor.java | 8 +- .../samples/OschinaBlogPageProcesser.java | 8 +- .../samples/OschinaPageProcesser.java | 8 +- .../webmagic}/samples/QzoneBlogProcessor.java | 8 +- .../webmagic}/samples/SinaBlogProcesser.java | 8 +- .../samples/TianyaPageProcesser.java | 8 +- .../webmagic}/selector/HtmlCleanerTest.java | 3 +- .../webmagic}/selector/RegexSelectorTest.java | 2 +- .../selector/SmartConentSelectorTest.java | 6 +- .../webmagic}/selector/XpathSelectorTest.java | 2 +- .../webmagic}/utils/UrlUtilsTest.java | 2 +- .../src}/test/resources/log4j.xml | 0 webmagic-core/target/classes/log4j.xml | 26 ++++ .../classes/us/codecraft/webmagic/Page.class | Bin 0 -> 3829 bytes .../us/codecraft/webmagic/Request.class | Bin 0 -> 657 bytes .../classes/us/codecraft/webmagic/Site.class | Bin 0 -> 3281 bytes .../us/codecraft/webmagic/Spider.class | Bin 0 -> 3947 bytes .../webmagic/downloader/Downloader.class | Bin 0 -> 245 bytes .../downloader/HttpClientDownloader.class | Bin 0 -> 3981 bytes .../webmagic/downloader/HttpClientPool.class | Bin 0 -> 3284 bytes .../webmagic/pipeline/ConsolePipeline.class | Bin 0 -> 1914 bytes .../webmagic/pipeline/FilePipeline.class | Bin 0 -> 3083 bytes .../webmagic/pipeline/Pipeline.class | Bin 0 -> 208 bytes .../webmagic/processor/PageProcessor.class | Bin 0 -> 242 bytes .../processor/SimplePageProcessor.class | Bin 0 -> 2344 bytes .../schedular/FileCacheQueueSchedular$1.class | Bin 0 -> 786 bytes .../schedular/FileCacheQueueSchedular.class | Bin 0 -> 5828 bytes .../webmagic/schedular/QueueSchedular.class | Bin 0 -> 1866 bytes .../webmagic/schedular/Schedular.class | Bin 0 -> 290 bytes .../us/codecraft/webmagic/selector/Html.class | Bin 0 -> 3165 bytes .../webmagic/selector/PlainText.class | Bin 0 -> 4035 bytes .../webmagic/selector/RegexResult.class | Bin 0 -> 739 bytes .../webmagic/selector/RegexSelector.class | Bin 0 -> 3461 bytes .../webmagic/selector/ReplaceSelector.class | Bin 0 -> 1832 bytes .../webmagic/selector/Selectable.class | Bin 0 -> 575 bytes .../webmagic/selector/Selector.class | Bin 0 -> 325 bytes .../webmagic/selector/SelectorFactory.class | Bin 0 -> 4216 bytes .../selector/SmartContentSelector$1.class | Bin 0 -> 1699 bytes .../selector/SmartContentSelector.class | Bin 0 -> 5353 bytes .../webmagic/selector/XpathSelector.class | Bin 0 -> 2137 bytes .../codecraft/webmagic/utils/UrlUtils.class | Bin 0 -> 3499 bytes webmagic-core/target/test-classes/log4j.xml | 31 +++++ .../us/codecraft/webmagic/HtmlTest.class | Bin 0 -> 1028 bytes .../us/codecraft/webmagic/SpiderTest.class | Bin 0 -> 2382 bytes .../samples/DiandianBlogProcessor.class | Bin 0 -> 1773 bytes .../samples/DianpingBlogProcessor.class | Bin 0 -> 2047 bytes .../samples/DiaoyuwengProcessor.class | Bin 0 -> 2041 bytes .../webmagic/samples/F58PageProcesser.class | Bin 0 -> 1577 bytes .../webmagic/samples/HuxiuProcessor.class | Bin 0 -> 1755 bytes .../webmagic/samples/KaichibaProcessor.class | Bin 0 -> 2169 bytes .../webmagic/samples/MeicanProcessor.class | Bin 0 -> 2102 bytes .../webmagic/samples/NjuBBSProcessor.class | Bin 0 -> 1755 bytes .../samples/OschinaBlogPageProcesser.class | Bin 0 -> 1874 bytes .../samples/OschinaPageProcesser.class | Bin 0 -> 1847 bytes .../webmagic/samples/QzoneBlogProcessor.class | Bin 0 -> 1764 bytes .../webmagic/samples/SinaBlogProcesser.class | Bin 0 -> 1841 bytes .../samples/TianyaPageProcesser.class | Bin 0 -> 1590 bytes .../webmagic/selector/HtmlCleanerTest.class | Bin 0 -> 1215 bytes .../webmagic/selector/RegexSelectorTest.class | Bin 0 -> 864 bytes .../selector/SmartConentSelectorTest.class | Bin 0 -> 111381 bytes .../webmagic/selector/XpathSelectorTest.class | Bin 0 -> 145948 bytes .../webmagic/utils/UrlUtilsTest.class | Bin 0 -> 54706 bytes webmagic-plugin/pom.xml | 67 +++++++++ webmagic-samples/pom.xml | 68 +++++++++ .../samples/DiandianBlogProcessor.java | 29 ++++ .../samples/DianpingBlogProcessor.java | 33 +++++ .../webmagic/samples/DiaoyuwengProcessor.java | 33 +++++ .../webmagic/samples/F58PageProcesser.java | 28 ++++ .../webmagic/samples/HuxiuProcessor.java | 29 ++++ .../webmagic/samples/KaichibaProcessor.java | 27 ++++ .../webmagic/samples/MeicanProcessor.java | 33 +++++ .../webmagic/samples/NjuBBSProcessor.java | 28 ++++ .../samples/OschinaBlogPageProcesser.java | 30 ++++ .../samples/OschinaPageProcesser.java | 29 ++++ .../webmagic/samples/QzoneBlogProcessor.java | 32 +++++ .../webmagic/samples/SinaBlogProcesser.java | 29 ++++ .../webmagic/samples/TianyaPageProcesser.java | 28 ++++ .../java/us/codecraft/webmagic/HtmlTest.java | 20 +++ .../us/codecraft/webmagic/SpiderTest.java | 131 ++++++++++++++++++ .../samples/DiandianBlogProcessor.class | Bin 0 -> 1773 bytes .../samples/DianpingBlogProcessor.class | Bin 0 -> 2047 bytes .../samples/DiaoyuwengProcessor.class | Bin 0 -> 2041 bytes .../webmagic/samples/F58PageProcesser.class | Bin 0 -> 1577 bytes .../webmagic/samples/HuxiuProcessor.class | Bin 0 -> 1755 bytes .../webmagic/samples/KaichibaProcessor.class | Bin 0 -> 2169 bytes .../webmagic/samples/MeicanProcessor.class | Bin 0 -> 2102 bytes .../webmagic/samples/NjuBBSProcessor.class | Bin 0 -> 1755 bytes .../samples/OschinaBlogPageProcesser.class | Bin 0 -> 1874 bytes .../samples/OschinaPageProcesser.class | Bin 0 -> 1847 bytes .../webmagic/samples/QzoneBlogProcessor.class | Bin 0 -> 1764 bytes .../webmagic/samples/SinaBlogProcesser.class | Bin 0 -> 1841 bytes .../samples/TianyaPageProcesser.class | Bin 0 -> 1590 bytes .../us/codecraft/webmagic/HtmlTest.class | Bin 0 -> 1028 bytes .../us/codecraft/webmagic/SpiderTest.class | Bin 0 -> 2382 bytes 131 files changed, 967 insertions(+), 145 deletions(-) create mode 100644 webmagic-core/pom.xml rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/Page.java (94%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/Request.java (80%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/Site.java (98%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/Spider.java (81%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/downloader/Downloader.java (50%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/downloader/HttpClientDownloader.java (85%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/downloader/HttpClientPool.java (96%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/pipeline/ConsolePipeline.java (73%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/pipeline/FilePipeline.java (87%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/pipeline/Pipeline.java (56%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/processor/PageProcessor.java (74%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/processor/SimplePageProcessor.java (86%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/schedular/FileCacheQueueSchedular.java (97%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/schedular/QueueSchedular.java (88%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/schedular/Schedular.java (61%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/Html.java (95%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/PlainText.java (98%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/RegexResult.java (91%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/RegexSelector.java (98%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/ReplaceSelector.java (96%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/Selectable.java (97%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/Selector.java (83%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/SelectorFactory.java (98%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/SmartContentSelector.java (98%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/selector/XpathSelector.java (98%) rename {src/main/java/us/codecraft/spider => webmagic-core/src/main/java/us/codecraft/webmagic}/utils/UrlUtils.java (98%) rename {src => webmagic-core/src}/main/resources/log4j.xml (100%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/HtmlTest.java (81%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/SpiderTest.java (88%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/DiandianBlogProcessor.java (84%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/DianpingBlogProcessor.java (86%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/DiaoyuwengProcessor.java (86%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/F58PageProcesser.java (81%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/HuxiuProcessor.java (84%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/KaichibaProcessor.java (84%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/MeicanProcessor.java (88%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/NjuBBSProcessor.java (83%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/OschinaBlogPageProcesser.java (84%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/OschinaPageProcesser.java (84%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/QzoneBlogProcessor.java (88%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/SinaBlogProcesser.java (85%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/samples/TianyaPageProcesser.java (82%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/selector/HtmlCleanerTest.java (89%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/selector/RegexSelectorTest.java (90%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/selector/SmartConentSelectorTest.java (99%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/selector/XpathSelectorTest.java (99%) rename {src/test/java/us/codecraft/spider => webmagic-core/src/test/java/us/codecraft/webmagic}/utils/UrlUtilsTest.java (99%) rename {src => webmagic-core/src}/test/resources/log4j.xml (100%) create mode 100644 webmagic-core/target/classes/log4j.xml create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/Page.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/Request.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/Site.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/Spider.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/downloader/Downloader.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/downloader/HttpClientDownloader.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/downloader/HttpClientPool.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/pipeline/ConsolePipeline.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/pipeline/FilePipeline.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/pipeline/Pipeline.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/processor/PageProcessor.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/processor/SimplePageProcessor.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/schedular/FileCacheQueueSchedular$1.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/schedular/FileCacheQueueSchedular.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/schedular/QueueSchedular.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/schedular/Schedular.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/Html.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/PlainText.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/RegexResult.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/RegexSelector.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/ReplaceSelector.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/Selectable.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/Selector.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/SelectorFactory.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/SmartContentSelector$1.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/SmartContentSelector.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/selector/XpathSelector.class create mode 100644 webmagic-core/target/classes/us/codecraft/webmagic/utils/UrlUtils.class create mode 100644 webmagic-core/target/test-classes/log4j.xml create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/HtmlTest.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/SpiderTest.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/DiandianBlogProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/DianpingBlogProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/DiaoyuwengProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/F58PageProcesser.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/HuxiuProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/KaichibaProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/MeicanProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/NjuBBSProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/OschinaPageProcesser.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/QzoneBlogProcessor.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/SinaBlogProcesser.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/samples/TianyaPageProcesser.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/selector/HtmlCleanerTest.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/selector/RegexSelectorTest.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/selector/SmartConentSelectorTest.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/selector/XpathSelectorTest.class create mode 100644 webmagic-core/target/test-classes/us/codecraft/webmagic/utils/UrlUtilsTest.class create mode 100644 webmagic-plugin/pom.xml create mode 100644 webmagic-samples/pom.xml create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/F58PageProcesser.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/HuxiuProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/KaichibaProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/MeicanProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java create mode 100644 webmagic-samples/src/main/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java create mode 100644 webmagic-samples/src/test/java/us/codecraft/webmagic/HtmlTest.java create mode 100644 webmagic-samples/src/test/java/us/codecraft/webmagic/SpiderTest.java create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/DiandianBlogProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/DianpingBlogProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/DiaoyuwengProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/F58PageProcesser.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/HuxiuProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/KaichibaProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/MeicanProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/NjuBBSProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/OschinaPageProcesser.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/QzoneBlogProcessor.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/SinaBlogProcesser.class create mode 100644 webmagic-samples/target/classes/us/codecraft/webmagic/samples/TianyaPageProcesser.class create mode 100644 webmagic-samples/target/test-classes/us/codecraft/webmagic/HtmlTest.class create mode 100644 webmagic-samples/target/test-classes/us/codecraft/webmagic/SpiderTest.class diff --git a/webmagic-core/pom.xml b/webmagic-core/pom.xml new file mode 100644 index 00000000..607eb13c --- /dev/null +++ b/webmagic-core/pom.xml @@ -0,0 +1,105 @@ + + + us.codecraft + 0.0.1-SNAPSHOT + 4.0.0 + + webmagic-core + + + + org.apache.httpcomponents + httpclient + 4.2.1 + + + + junit + junit + 4.7 + test + + + + com.google.guava + guava + 13.0.1 + + + + org.apache.commons + commons-lang3 + 3.1 + + + + log4j + log4j + 1.2.17 + + + + commons-collections + commons-collections + 3.2.1 + + + + net.sourceforge.htmlcleaner + htmlcleaner + 2.4 + + + + org.apache.commons + commons-io + 1.3.2 + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + UTF-8 + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.0-beta-7 + + + + + + \ No newline at end of file diff --git a/src/main/java/us/codecraft/spider/Page.java b/webmagic-core/src/main/java/us/codecraft/webmagic/Page.java similarity index 94% rename from src/main/java/us/codecraft/spider/Page.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/Page.java index 1f96e58c..8f1a4c77 100644 --- a/src/main/java/us/codecraft/spider/Page.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/Page.java @@ -1,8 +1,8 @@ -package us.codecraft.spider; +package us.codecraft.webmagic; import org.apache.commons.lang3.StringUtils; -import us.codecraft.spider.selector.Selectable; -import us.codecraft.spider.utils.UrlUtils; +import us.codecraft.webmagic.selector.Selectable; +import us.codecraft.webmagic.utils.UrlUtils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/us/codecraft/spider/Request.java b/webmagic-core/src/main/java/us/codecraft/webmagic/Request.java similarity index 80% rename from src/main/java/us/codecraft/spider/Request.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/Request.java index 4446c167..ccefc7f9 100644 --- a/src/main/java/us/codecraft/spider/Request.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/Request.java @@ -1,8 +1,4 @@ -package us.codecraft.spider; - -import us.codecraft.spider.Site; - -import java.util.List; +package us.codecraft.webmagic; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/Site.java b/webmagic-core/src/main/java/us/codecraft/webmagic/Site.java similarity index 98% rename from src/main/java/us/codecraft/spider/Site.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/Site.java index 6f27a228..4c032aaf 100644 --- a/src/main/java/us/codecraft/spider/Site.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/Site.java @@ -1,4 +1,4 @@ -package us.codecraft.spider; +package us.codecraft.webmagic; import java.util.HashSet; import java.util.Set; diff --git a/src/main/java/us/codecraft/spider/Spider.java b/webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java similarity index 81% rename from src/main/java/us/codecraft/spider/Spider.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java index 81ecd9de..835bdf4e 100644 --- a/src/main/java/us/codecraft/spider/Spider.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/Spider.java @@ -1,17 +1,14 @@ -package us.codecraft.spider; +package us.codecraft.webmagic; import org.apache.commons.collections.CollectionUtils; import org.apache.log4j.Logger; -import us.codecraft.spider.downloader.Downloader; -import us.codecraft.spider.downloader.HttpClientDownloader; -import us.codecraft.spider.pipeline.ConsolePipeline; -import us.codecraft.spider.pipeline.Pipeline; -import us.codecraft.spider.processor.PageProcessor; -import us.codecraft.spider.schedular.QueueSchedular; -import us.codecraft.spider.schedular.Schedular; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import us.codecraft.webmagic.downloader.Downloader; +import us.codecraft.webmagic.downloader.HttpClientDownloader; +import us.codecraft.webmagic.pipeline.ConsolePipeline; +import us.codecraft.webmagic.pipeline.Pipeline; +import us.codecraft.webmagic.processor.PageProcessor; +import us.codecraft.webmagic.schedular.QueueSchedular; +import us.codecraft.webmagic.schedular.Schedular; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/downloader/Downloader.java b/webmagic-core/src/main/java/us/codecraft/webmagic/downloader/Downloader.java similarity index 50% rename from src/main/java/us/codecraft/spider/downloader/Downloader.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/downloader/Downloader.java index d20bfbb6..e8475848 100644 --- a/src/main/java/us/codecraft/spider/downloader/Downloader.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/downloader/Downloader.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.downloader; +package us.codecraft.webmagic.downloader; -import us.codecraft.spider.Page; -import us.codecraft.spider.Request; -import us.codecraft.spider.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Request; +import us.codecraft.webmagic.Site; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/downloader/HttpClientDownloader.java b/webmagic-core/src/main/java/us/codecraft/webmagic/downloader/HttpClientDownloader.java similarity index 85% rename from src/main/java/us/codecraft/spider/downloader/HttpClientDownloader.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/downloader/HttpClientDownloader.java index c817fb6c..269ba6d3 100644 --- a/src/main/java/us/codecraft/spider/downloader/HttpClientDownloader.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/downloader/HttpClientDownloader.java @@ -1,16 +1,16 @@ -package us.codecraft.spider.downloader; +package us.codecraft.webmagic.downloader; import org.apache.commons.io.IOUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.log4j.Logger; -import us.codecraft.spider.Page; -import us.codecraft.spider.Request; -import us.codecraft.spider.Site; -import us.codecraft.spider.selector.Html; -import us.codecraft.spider.selector.PlainText; -import us.codecraft.spider.utils.UrlUtils; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Request; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.selector.Html; +import us.codecraft.webmagic.selector.PlainText; +import us.codecraft.webmagic.utils.UrlUtils; /** diff --git a/src/main/java/us/codecraft/spider/downloader/HttpClientPool.java b/webmagic-core/src/main/java/us/codecraft/webmagic/downloader/HttpClientPool.java similarity index 96% rename from src/main/java/us/codecraft/spider/downloader/HttpClientPool.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/downloader/HttpClientPool.java index 90696a62..4fdf4212 100644 --- a/src/main/java/us/codecraft/spider/downloader/HttpClientPool.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/downloader/HttpClientPool.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.downloader; +package us.codecraft.webmagic.downloader; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; @@ -10,7 +10,7 @@ import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.params.*; -import us.codecraft.spider.Site; +import us.codecraft.webmagic.Site; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/pipeline/ConsolePipeline.java b/webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/ConsolePipeline.java similarity index 73% rename from src/main/java/us/codecraft/spider/pipeline/ConsolePipeline.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/ConsolePipeline.java index 6aa8f09c..4115b8ce 100644 --- a/src/main/java/us/codecraft/spider/pipeline/ConsolePipeline.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/ConsolePipeline.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.pipeline; +package us.codecraft.webmagic.pipeline; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.selector.Selectable; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.selector.Selectable; import java.util.Map; diff --git a/src/main/java/us/codecraft/spider/pipeline/FilePipeline.java b/webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/FilePipeline.java similarity index 87% rename from src/main/java/us/codecraft/spider/pipeline/FilePipeline.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/FilePipeline.java index 564a9fae..508b00ed 100644 --- a/src/main/java/us/codecraft/spider/pipeline/FilePipeline.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/FilePipeline.java @@ -1,10 +1,10 @@ -package us.codecraft.spider.pipeline; +package us.codecraft.webmagic.pipeline; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.selector.Selectable; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.selector.Selectable; import java.io.File; import java.io.FileWriter; @@ -19,7 +19,7 @@ import java.util.Map; */ public class FilePipeline implements Pipeline { - private String path = "/data/temp/spider/"; + private String path = "/data/temp/webmagic/"; public FilePipeline(){ diff --git a/src/main/java/us/codecraft/spider/pipeline/Pipeline.java b/webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/Pipeline.java similarity index 56% rename from src/main/java/us/codecraft/spider/pipeline/Pipeline.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/Pipeline.java index 549c70df..ef27cdae 100644 --- a/src/main/java/us/codecraft/spider/pipeline/Pipeline.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/pipeline/Pipeline.java @@ -1,7 +1,7 @@ -package us.codecraft.spider.pipeline; +package us.codecraft.webmagic.pipeline; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/processor/PageProcessor.java b/webmagic-core/src/main/java/us/codecraft/webmagic/processor/PageProcessor.java similarity index 74% rename from src/main/java/us/codecraft/spider/processor/PageProcessor.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/processor/PageProcessor.java index b2617a91..22a24c96 100644 --- a/src/main/java/us/codecraft/spider/processor/PageProcessor.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/processor/PageProcessor.java @@ -1,7 +1,7 @@ -package us.codecraft.spider.processor; +package us.codecraft.webmagic.processor; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/processor/SimplePageProcessor.java b/webmagic-core/src/main/java/us/codecraft/webmagic/processor/SimplePageProcessor.java similarity index 86% rename from src/main/java/us/codecraft/spider/processor/SimplePageProcessor.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/processor/SimplePageProcessor.java index 197ca878..a8165bb4 100644 --- a/src/main/java/us/codecraft/spider/processor/SimplePageProcessor.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/processor/SimplePageProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.processor; +package us.codecraft.webmagic.processor; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.utils.UrlUtils; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.utils.UrlUtils; import java.util.List; diff --git a/src/main/java/us/codecraft/spider/schedular/FileCacheQueueSchedular.java b/webmagic-core/src/main/java/us/codecraft/webmagic/schedular/FileCacheQueueSchedular.java similarity index 97% rename from src/main/java/us/codecraft/spider/schedular/FileCacheQueueSchedular.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/schedular/FileCacheQueueSchedular.java index 3f3cf3c5..0372d0ed 100644 --- a/src/main/java/us/codecraft/spider/schedular/FileCacheQueueSchedular.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/schedular/FileCacheQueueSchedular.java @@ -1,9 +1,9 @@ -package us.codecraft.spider.schedular; +package us.codecraft.webmagic.schedular; import org.apache.commons.lang3.math.NumberUtils; import org.apache.log4j.Logger; -import us.codecraft.spider.Site; -import us.codecraft.spider.Request; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Request; import java.io.*; import java.util.LinkedHashSet; diff --git a/src/main/java/us/codecraft/spider/schedular/QueueSchedular.java b/webmagic-core/src/main/java/us/codecraft/webmagic/schedular/QueueSchedular.java similarity index 88% rename from src/main/java/us/codecraft/spider/schedular/QueueSchedular.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/schedular/QueueSchedular.java index 81829633..071f708c 100644 --- a/src/main/java/us/codecraft/spider/schedular/QueueSchedular.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/schedular/QueueSchedular.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.schedular; +package us.codecraft.webmagic.schedular; import org.apache.log4j.Logger; -import us.codecraft.spider.Request; -import us.codecraft.spider.Site; +import us.codecraft.webmagic.Request; +import us.codecraft.webmagic.Site; import java.util.HashSet; import java.util.Set; diff --git a/src/main/java/us/codecraft/spider/schedular/Schedular.java b/webmagic-core/src/main/java/us/codecraft/webmagic/schedular/Schedular.java similarity index 61% rename from src/main/java/us/codecraft/spider/schedular/Schedular.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/schedular/Schedular.java index 246afb22..a5b71f5a 100644 --- a/src/main/java/us/codecraft/spider/schedular/Schedular.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/schedular/Schedular.java @@ -1,7 +1,7 @@ -package us.codecraft.spider.schedular; +package us.codecraft.webmagic.schedular; -import us.codecraft.spider.Request; -import us.codecraft.spider.Site; +import us.codecraft.webmagic.Request; +import us.codecraft.webmagic.Site; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/selector/Html.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Html.java similarity index 95% rename from src/main/java/us/codecraft/spider/selector/Html.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/Html.java index 7bbb64a6..c385ff99 100644 --- a/src/main/java/us/codecraft/spider/selector/Html.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Html.java @@ -1,6 +1,4 @@ -package us.codecraft.spider.selector; - -import org.apache.commons.collections.CollectionUtils; +package us.codecraft.webmagic.selector; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/us/codecraft/spider/selector/PlainText.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/PlainText.java similarity index 98% rename from src/main/java/us/codecraft/spider/selector/PlainText.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/PlainText.java index 055cbdac..91ab7abd 100644 --- a/src/main/java/us/codecraft/spider/selector/PlainText.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/PlainText.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.apache.commons.collections.CollectionUtils; diff --git a/src/main/java/us/codecraft/spider/selector/RegexResult.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexResult.java similarity index 91% rename from src/main/java/us/codecraft/spider/selector/RegexResult.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexResult.java index f3ab5852..8b14e8b7 100644 --- a/src/main/java/us/codecraft/spider/selector/RegexResult.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexResult.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; /** * User: cairne diff --git a/src/main/java/us/codecraft/spider/selector/RegexSelector.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexSelector.java similarity index 98% rename from src/main/java/us/codecraft/spider/selector/RegexSelector.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexSelector.java index 692c45ed..a2e8b3de 100644 --- a/src/main/java/us/codecraft/spider/selector/RegexSelector.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexSelector.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/java/us/codecraft/spider/selector/ReplaceSelector.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/ReplaceSelector.java similarity index 96% rename from src/main/java/us/codecraft/spider/selector/ReplaceSelector.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/ReplaceSelector.java index ddf887e9..5f788982 100644 --- a/src/main/java/us/codecraft/spider/selector/ReplaceSelector.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/ReplaceSelector.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import java.util.List; import java.util.regex.Matcher; diff --git a/src/main/java/us/codecraft/spider/selector/Selectable.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectable.java similarity index 97% rename from src/main/java/us/codecraft/spider/selector/Selectable.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectable.java index 9f44c3c1..0fcc4208 100644 --- a/src/main/java/us/codecraft/spider/selector/Selectable.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selectable.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import java.util.List; diff --git a/src/main/java/us/codecraft/spider/selector/Selector.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selector.java similarity index 83% rename from src/main/java/us/codecraft/spider/selector/Selector.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selector.java index f44ed0f2..914e8ab0 100644 --- a/src/main/java/us/codecraft/spider/selector/Selector.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/Selector.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import java.util.List; diff --git a/src/main/java/us/codecraft/spider/selector/SelectorFactory.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/SelectorFactory.java similarity index 98% rename from src/main/java/us/codecraft/spider/selector/SelectorFactory.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/SelectorFactory.java index d4797062..af199694 100644 --- a/src/main/java/us/codecraft/spider/selector/SelectorFactory.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/SelectorFactory.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/java/us/codecraft/spider/selector/SmartContentSelector.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/SmartContentSelector.java similarity index 98% rename from src/main/java/us/codecraft/spider/selector/SmartContentSelector.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/SmartContentSelector.java index b87a0a3b..c2e36dff 100644 --- a/src/main/java/us/codecraft/spider/selector/SmartContentSelector.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/SmartContentSelector.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.apache.log4j.Logger; import org.htmlcleaner.HtmlCleaner; diff --git a/src/main/java/us/codecraft/spider/selector/XpathSelector.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/XpathSelector.java similarity index 98% rename from src/main/java/us/codecraft/spider/selector/XpathSelector.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/selector/XpathSelector.java index 6d9a1099..6de2f08a 100644 --- a/src/main/java/us/codecraft/spider/selector/XpathSelector.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/XpathSelector.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.htmlcleaner.*; diff --git a/src/main/java/us/codecraft/spider/utils/UrlUtils.java b/webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java similarity index 98% rename from src/main/java/us/codecraft/spider/utils/UrlUtils.java rename to webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java index fdaa419b..124ca641 100644 --- a/src/main/java/us/codecraft/spider/utils/UrlUtils.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/utils/UrlUtils.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.utils; +package us.codecraft.webmagic.utils; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/resources/log4j.xml b/webmagic-core/src/main/resources/log4j.xml similarity index 100% rename from src/main/resources/log4j.xml rename to webmagic-core/src/main/resources/log4j.xml diff --git a/src/test/java/us/codecraft/spider/HtmlTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/HtmlTest.java similarity index 81% rename from src/test/java/us/codecraft/spider/HtmlTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/HtmlTest.java index 0612d81b..f7990984 100644 --- a/src/test/java/us/codecraft/spider/HtmlTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/HtmlTest.java @@ -1,8 +1,8 @@ -package us.codecraft.spider; +package us.codecraft.webmagic; import org.junit.Assert; import org.junit.Test; -import us.codecraft.spider.selector.Html; +import us.codecraft.webmagic.selector.Html; /** * User: cairne diff --git a/src/test/java/us/codecraft/spider/SpiderTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/SpiderTest.java similarity index 88% rename from src/test/java/us/codecraft/spider/SpiderTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/SpiderTest.java index 5c08b849..5cb9848f 100644 --- a/src/test/java/us/codecraft/spider/SpiderTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/SpiderTest.java @@ -1,11 +1,11 @@ -package us.codecraft.spider; +package us.codecraft.webmagic; import org.junit.Ignore; import org.junit.Test; -import us.codecraft.spider.pipeline.FilePipeline; -import us.codecraft.spider.processor.SimplePageProcessor; -import us.codecraft.spider.samples.HuxiuProcessor; -import us.codecraft.spider.schedular.FileCacheQueueSchedular; +import us.codecraft.webmagic.pipeline.FilePipeline; +import us.codecraft.webmagic.processor.SimplePageProcessor; +import us.codecraft.webmagic.samples.HuxiuProcessor; +import us.codecraft.webmagic.schedular.FileCacheQueueSchedular; /** * User: cairne @@ -24,12 +24,12 @@ public class SpiderTest { @Test public void testGlobalSpider(){ // PageProcessor pageProcessor = new MeicanProcessor(); -// Spider.me().pipeline(new FilePipeline()).schedular(new FileCacheQueueSchedular(pageProcessor.getSite(),"/data/temp/spider/cache/")). +// Spider.me().pipeline(new FilePipeline()).schedular(new FileCacheQueueSchedular(pageProcessor.getSite(),"/data/temp/webmagic/cache/")). // processor(pageProcessor).run(); SimplePageProcessor pageProcessor2 = new SimplePageProcessor("http://www.diaoyuweng.com/home.php?mod=space&uid=88304&do=thread&view=me&type=thread&from=space", "http://www.diaoyuweng.com/thread-*-1-1.html"); pageProcessor2.getSite().setEncoding("GBK"); System.out.println(pageProcessor2.getSite().getEncoding()); - Spider.me().pipeline(new FilePipeline()).schedular(new FileCacheQueueSchedular(pageProcessor2.getSite(),"/data/temp/spider/cache/")). + Spider.me().pipeline(new FilePipeline()).schedular(new FileCacheQueueSchedular(pageProcessor2.getSite(),"/data/temp/webmagic/cache/")). processor(pageProcessor2).run(); diff --git a/src/test/java/us/codecraft/spider/samples/DiandianBlogProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java similarity index 84% rename from src/test/java/us/codecraft/spider/samples/DiandianBlogProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java index c735cda3..efd1ff7e 100644 --- a/src/test/java/us/codecraft/spider/samples/DiandianBlogProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/DianpingBlogProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java similarity index 86% rename from src/test/java/us/codecraft/spider/samples/DianpingBlogProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java index f041a32b..dd601adb 100644 --- a/src/test/java/us/codecraft/spider/samples/DianpingBlogProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/DiaoyuwengProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java similarity index 86% rename from src/test/java/us/codecraft/spider/samples/DiaoyuwengProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java index 586ec01a..05b68b66 100644 --- a/src/test/java/us/codecraft/spider/samples/DiaoyuwengProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/F58PageProcesser.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/F58PageProcesser.java similarity index 81% rename from src/test/java/us/codecraft/spider/samples/F58PageProcesser.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/F58PageProcesser.java index a5ce6cb2..78211c4c 100644 --- a/src/test/java/us/codecraft/spider/samples/F58PageProcesser.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/F58PageProcesser.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/HuxiuProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/HuxiuProcessor.java similarity index 84% rename from src/test/java/us/codecraft/spider/samples/HuxiuProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/HuxiuProcessor.java index d7d1a6e9..82552f95 100644 --- a/src/test/java/us/codecraft/spider/samples/HuxiuProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/HuxiuProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/KaichibaProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/KaichibaProcessor.java similarity index 84% rename from src/test/java/us/codecraft/spider/samples/KaichibaProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/KaichibaProcessor.java index 59858033..58a2cb81 100644 --- a/src/test/java/us/codecraft/spider/samples/KaichibaProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/KaichibaProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; /** * User: cairne diff --git a/src/test/java/us/codecraft/spider/samples/MeicanProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/MeicanProcessor.java similarity index 88% rename from src/test/java/us/codecraft/spider/samples/MeicanProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/MeicanProcessor.java index 3d15cd2b..637aec17 100644 --- a/src/test/java/us/codecraft/spider/samples/MeicanProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/MeicanProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/NjuBBSProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java similarity index 83% rename from src/test/java/us/codecraft/spider/samples/NjuBBSProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java index fa22eedc..ca46de67 100644 --- a/src/test/java/us/codecraft/spider/samples/NjuBBSProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/OschinaBlogPageProcesser.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java similarity index 84% rename from src/test/java/us/codecraft/spider/samples/OschinaBlogPageProcesser.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java index 97ced9b4..2166d9b1 100644 --- a/src/test/java/us/codecraft/spider/samples/OschinaBlogPageProcesser.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/OschinaPageProcesser.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java similarity index 84% rename from src/test/java/us/codecraft/spider/samples/OschinaPageProcesser.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java index 0ebaab6f..cdfbc1e0 100644 --- a/src/test/java/us/codecraft/spider/samples/OschinaPageProcesser.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/QzoneBlogProcessor.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java similarity index 88% rename from src/test/java/us/codecraft/spider/samples/QzoneBlogProcessor.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java index 320494d7..67ef671e 100644 --- a/src/test/java/us/codecraft/spider/samples/QzoneBlogProcessor.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Page; -import us.codecraft.spider.Site; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/samples/SinaBlogProcesser.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java similarity index 85% rename from src/test/java/us/codecraft/spider/samples/SinaBlogProcesser.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java index f1de3cca..b86fff8f 100644 --- a/src/test/java/us/codecraft/spider/samples/SinaBlogProcesser.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; /** * User: cairne diff --git a/src/test/java/us/codecraft/spider/samples/TianyaPageProcesser.java b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java similarity index 82% rename from src/test/java/us/codecraft/spider/samples/TianyaPageProcesser.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java index e39abc8c..7a8920be 100644 --- a/src/test/java/us/codecraft/spider/samples/TianyaPageProcesser.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java @@ -1,8 +1,8 @@ -package us.codecraft.spider.samples; +package us.codecraft.webmagic.samples; -import us.codecraft.spider.Site; -import us.codecraft.spider.Page; -import us.codecraft.spider.processor.PageProcessor; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; import java.util.List; diff --git a/src/test/java/us/codecraft/spider/selector/HtmlCleanerTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/HtmlCleanerTest.java similarity index 89% rename from src/test/java/us/codecraft/spider/selector/HtmlCleanerTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/selector/HtmlCleanerTest.java index b3931ad3..7aa2fc77 100644 --- a/src/test/java/us/codecraft/spider/selector/HtmlCleanerTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/HtmlCleanerTest.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.htmlcleaner.CleanerProperties; import org.htmlcleaner.HtmlCleaner; @@ -6,7 +6,6 @@ import org.htmlcleaner.TagNode; import org.junit.Test; import java.io.IOException; -import java.net.MalformedURLException; import java.net.URL; /** diff --git a/src/test/java/us/codecraft/spider/selector/RegexSelectorTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java similarity index 90% rename from src/test/java/us/codecraft/spider/selector/RegexSelectorTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java index a53b5a92..6128f170 100644 --- a/src/test/java/us/codecraft/spider/selector/RegexSelectorTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import junit.framework.Assert; import org.junit.Test; diff --git a/src/test/java/us/codecraft/spider/selector/SmartConentSelectorTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/SmartConentSelectorTest.java similarity index 99% rename from src/test/java/us/codecraft/spider/selector/SmartConentSelectorTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/selector/SmartConentSelectorTest.java index 06c56b3e..4620a242 100644 --- a/src/test/java/us/codecraft/spider/selector/SmartConentSelectorTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/SmartConentSelectorTest.java @@ -1,12 +1,8 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; -import org.htmlcleaner.CleanerProperties; -import org.htmlcleaner.HtmlCleaner; -import org.htmlcleaner.TagNode; import org.junit.Test; import java.io.IOException; -import java.net.URL; /** * User: cairne diff --git a/src/test/java/us/codecraft/spider/selector/XpathSelectorTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/XpathSelectorTest.java similarity index 99% rename from src/test/java/us/codecraft/spider/selector/XpathSelectorTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/selector/XpathSelectorTest.java index 24988f7a..96ea6e8c 100644 --- a/src/test/java/us/codecraft/spider/selector/XpathSelectorTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/XpathSelectorTest.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.selector; +package us.codecraft.webmagic.selector; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/us/codecraft/spider/utils/UrlUtilsTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java similarity index 99% rename from src/test/java/us/codecraft/spider/utils/UrlUtilsTest.java rename to webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java index 305bad7a..d4240058 100644 --- a/src/test/java/us/codecraft/spider/utils/UrlUtilsTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java @@ -1,4 +1,4 @@ -package us.codecraft.spider.utils; +package us.codecraft.webmagic.utils; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/resources/log4j.xml b/webmagic-core/src/test/resources/log4j.xml similarity index 100% rename from src/test/resources/log4j.xml rename to webmagic-core/src/test/resources/log4j.xml diff --git a/webmagic-core/target/classes/log4j.xml b/webmagic-core/target/classes/log4j.xml new file mode 100644 index 00000000..a6630f81 --- /dev/null +++ b/webmagic-core/target/classes/log4j.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/Page.class b/webmagic-core/target/classes/us/codecraft/webmagic/Page.class new file mode 100644 index 0000000000000000000000000000000000000000..c9abd013036cc8f2b49fd133d847985d1708ecf7 GIT binary patch literal 3829 zcmbtXX>$`t5Pc)bT3KEhY);$Ur%x0hB*Z2L1K~90u)*OV+;>7Q zNb)s&4OQWAs2ml(OK~cO z)AIdH4A0i#IT-RWQil{q<7k1Y;Y=L0@;w$u9ZYGPu7icMbr?rRJ|;9|99Z%5h|rN8rWT)?D;iyEGfqZuzq2QSLcFKKvLK(ozrMYG@tEbT8AlBwLNnX-*D zPV#~|GGUBaspJvYphqBj#xgUb1%X-pXN~hlvglZuK(%#GaWAm zLZ9se*KZXZx?f+lv}J~KN<>IVTHem3%mN*TTicEi;tmogiLtWgKyhNkw1*^ofyVw^ z%E%luY)j6)#fX!(xOLGC2OToTOr8B^63Fejy0dC{2-2#<)kNxr@;RD=|nP+*v5?T-W*l8zrs=9y(Md zkj4r!J&A0*Z}I<#q`?>+t#&`hV^h_R@-Bf0sv%^p5}4~t?q0{V4VD9?5c8^(X7eir zbunKO)hgds={P_HQn`si$4HG+I7*A`3L0Kv7t!#lz}jkXfj%VQc>$u3>j@92Tj;98 zL`m{dS&LC7N)6&%@rp@c`Hbl<)tf+^JIfnZ%#`Jly~Gh8%oXjFxyzC@SSt%^ofMyr z6ZDB}Wm|ctTgT`4LPsms>i800Y4}>l6%NQpGwgzeF0V_{8-puCi`DYHi& z7Ujf{8!D=@6eA7d1zv+rVc2rgRYu;0EWN~>oI7I|s(|g;2&@WDuxw?8BrDs4U4O=! zJYr@H$2xDSdap=^=gpUl5{CPi1X}%pdxj@{hNU1`@?mycEawlK7XHMlK}d?5qmV3l z5WE_%=A2cp#;hgvW|5Y^cOb!WC%X7t$FBzv;RsmT{v$+Vh|h3iWC}GQ$X7IkDQIB~ zUssNje8zbIu!Mh0@d!t{yB+JXfioeyis$+;!s=T~`z^%U@1XYhEyQm?a9GEoeglbV zw~fRB#uLFj%wmMijB46_OWFOS*hByld6Ld0@*0W!2M$790-|bhwQqBcx7j7=F@Ap> zoB5PZ4iaOS?}T*H(HR_U8-r|D4wt#co~x)ol{_*^K$D~@as0sV9aE_1Z{e;f%o6O>!yL>O_zex+k*3IPG+xEdrby$Qo0xkQ z-5kxkiTPI$y@sx)2wg0g!a{-DXzG@;#2qvrZ;FI}M$0WMn!@4`hOgcGzVq%i#Jg)c z?>5!^dYw2lOdwATc{u7FQ7K=;ev%M?yxkE)ox^y zV|L^_taw;L2EfQ>Go}V2UWmOE!#=XHpDX=7x$G{-x*JE7f@NgQh|I=4x(aI;WL%69 zLIoy!#89BF7gWpXV1S$ijt1*`LA9<2$<>e#XtWG8Dt{UfhQKild(8R^Y)Lhc;Xoiy dq6Xf}DkL@;|gPb&CK1 literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/Request.class b/webmagic-core/target/classes/us/codecraft/webmagic/Request.class new file mode 100644 index 0000000000000000000000000000000000000000..e55141db1f4b83524f72d105179991b4228ecb07 GIT binary patch literal 657 zcmaJ7j8t|{Js}>(E)>DOtdrb6olDj$Q=%^1w+O50&x-#91)&# z$EQl&9=hD`^3ap}teA^#y%EE@9gi%RfNscdBI`jo1K#so>rC9mVkE5;dm=hYy*3SV ziZ;2WBNy^Z8;1GUE)U+ClZ+fDbwzf`YOdr`wgtUHHOmO9z%Ue0JF5#i3pgZwLi2_NUPl}C%P)`qJg!ChzK^5t7 P60H0Nx2A%diNwM;=GuII literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/Site.class b/webmagic-core/target/classes/us/codecraft/webmagic/Site.class new file mode 100644 index 0000000000000000000000000000000000000000..902294a47c4f429de43ad5914e10d100fa41bb63 GIT binary patch literal 3281 zcmah~TXz#x6#h;w&9#?MXr+a=AVQk}K|w`ZE~OVK778XU7r`=3rs>c$Daiyx{S`jB zd{d7P`0bfVbLoV3HT%rjXYYN!{hfXG`RBhs{seFut6}WJTnK(# z7jZ+x7XhTg94&QPH1i@BMBEf{OPp>;a0g$8an~02WO^@vufm97E{sLo7mXIcl0sXy zxTYBeg*~$mv`1PpuN891lvy$gxlx5srL336b9%v~Wu{nMHFSlbUdR-)G~j31)Jo=j zDNoaKUf0*t#u_cuj6(0^)b#lLYO! z)b`0mxKf+NxHjHIXso(h-9a5~*0nmG7{fOQJmHYB9d8#VdKypa$$Is)E;R*m2eC_Z zp@Y@qRIkucn+c<-S~;_#SkQ7Xb;`lvnO$~h(;rr}Jj-fdeHF|tJAY2@ zeo_i1ig$4&iUT+p#Q+AQIE+DszShMa#eVcg@s5Zd5q%>1MP!f-K#yVqlL0J8aRnC@ zVpdsN2YZyU##z*M!!SlT3n7k#6LN?lWJ7kX1=%8RQdu>IAvLal6=j z79ww5v0WpgxfY1*OEk)$cI5|ntqw7`z0DZE&bhJ{X~vpz!K!fHowdjg)@~Bxtri%i z5eRD+aFMc^HP42{NbMrtbwx6cOOA8xYW7Q4s3l@w&HF^6wLl`RNRY4(+riWs5-(k3 zGoJVve&0r73mx(2h$i^^34ZTJ;xG8G@~Zi^&?Ccf{$8QogCEiP6k(ZeiJjcWE$o$n zy1;XEY#UH-8-%zLvR3SQ*mjU0;d%$^ZG)g~5Trq{-hg@<_=GvTP~r&ldzsxQ$9`-u z%~hUVo`kQFi~=5_i0`qEXDC_J4B1IAzv_uK`C7+-aJ!ha-CycgZ(S~CdPIdsCo*Y_kLARHbhT`8ud(C^dzED zPkKA4C+S@ZcBKAV;(hGiz+*m0U$f?);4Hqub$rVQ^t-wm$UBJ!k;Ug$4M=*I5q!gm zhuJYD^@b|@+oRONTc@`gSGoJ__R}SoTK@W8BgS`T&og-WaK-TVOLV`&UJq`{3ueDO U_6xS3hd01yL!QH{T=U@C|KxByWB>pF literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/Spider.class b/webmagic-core/target/classes/us/codecraft/webmagic/Spider.class new file mode 100644 index 0000000000000000000000000000000000000000..d9d30f9c388dcf70d01037565c586b94e3563e9e GIT binary patch literal 3947 zcmai1`F9i775<(i7;7|$%|IapXu!piZ4?4oii5KlC=RkA*w6q;+p#pr17nRCjRI+w zHVfIBtx21NbW7SK&fbtxkh<5^3C{;TJmQ1(RQD_?3>1U}8$yaUBH|rJ$wZsLroCRnjn# zf{kN3j>FL~sbew9DY&R;IH6+&JUOYR;G-sG?v+PR$|I-b=)M$wjr*nC0~#LG@nbxs z<2U%Nj)(C`3XkHk6i(xD`SXN^Ck6DPd$R1fX3_El`tr4EuHY7}f@dD}b0@9wNwZ`Z za!r}sj)r)@Ku5){SdLw`1Tqmv>k_$rp(u|nsF)>dpXU~=YSpFMT-4dRNN!*20U{); zg$b)zb4;G@i8$R5$&J>9d2+tvmP*psm3h}I<;;r7%^VlE9?Rv`mK3_#F5CWqK)gG1 zP#`f#N(2_>>FG#qa@_L9%yEY+OY&~PbPk%HE$884!k@6K0&6178m-vmno44mL|E4y zMO;HJS*gOOBcMnmNZTmvUojl~(SF(%6pPD{32x zLi=HwToEho)yj;G%q4-<5xmI6p%;m&?O#S}l)IGDJnKZws`>(JBjEN20+d}a>YIh* z!)8TAUBgo>Tn$eP%&R(im7vNX`QWjcr< zRxOLtEEYpmv?Yo&<(t$Ivo|n)fs&eUJGmk1Fn!nS*YG={jk-0jVC}MH%BF(6+9X45 zuyJh_xc-VozuWgKgN|*L{bu|<#N!P zR<-w9X1YMcrc9_h+?+gOr!QIlpkr3q*p|*|6l#$Pydt8TvRCtH&{+j~yIV>jIGVXk zAMR`KL`1V=0aI1r;hN~a8q|79iu$JKAMl*-H@{Kev&$tq)!k}txO$|;gCIZpWesN9 zo7&9iMl#EuRjW=23`7-ny~{*2A=Ry<&K0fZ)kCkWNmN{iZf%d!5I{uW*VXfCZSPdu z=Kyo0zAkVmN^u=KLiJ_s3VXRBBPV<8m};54qK6pyFed~ywzs*_km{XCpg+n;rRcI2 zlKe#X9Wn+BE6f#{NrmHMo>^f1ET(;9rpMpVS=P*wdd;Y^%G*_+*|n*qWD4%&Bs(P^ zUyj3;!%Lx>8*GdZu&EP8x2q$rzjLzU-^ce$7<`4;6z$I(7D%g((9p%uFzMBeAh3Ln zDUF+g6i%4c5$hChKT=ANL|IMdz6-*P=esh^M=UFZFWi{C3HS<*$=9pagKn^*%^rJMZ^xxAU=%*hx0g`KMjq;4i1yk(6ia|NL_$2jRj{F zSB(H1H{qw8C9w_tq2hHkRQ~I@h&0g`e$26e#G9|q ztmW^`*d9tBRSp8#Y|k_nWzRvsh{cC`X0b%zJeI~kN9PQd1@l=fk0UGbVhS%!7lHLe z*g&GXlwHe}_H1YuapfgNU2F%qCDgekq$YV0D-MyKA2lHZ6EiI?CPOGbqj75pa0``4 zCpBrb-eQsb-wCL39(78V0&BE}HJZF=l{G!MtsR*51F-7|wj}~g=7V(Y_D0mdrfUf* zw#einMPgoZO8!>HFx>kejBuLh<$P5fBYpoxI@@y|SIuDc)TRH)GkvqTI)-fD4AyX} z^-*#yNe_iuu%<4ZlbI4%k=Vv`1v5cs9xP)ftYn0{7~>3C-%Q@O(%S)=Imo{e?7%_n zgo#}!;%CaWERF8snL+N!m|7uYI*w3s7hPP2eU#lzeuucmG{kmm7)?-w&yZ046pzX{43N0>7qHSxOP}Bwnrx5!Fof_`?idDnAgl5KY`2W6``E39I literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/downloader/Downloader.class b/webmagic-core/target/classes/us/codecraft/webmagic/downloader/Downloader.class new file mode 100644 index 0000000000000000000000000000000000000000..eb31726ac61e9c843cf22e06a26c70fc9e59442c GIT binary patch literal 245 zcmZ{f!3u&v7=-6HQ|nTXQ3&m!qu1yZ6nW~nu79GKOY55N)}aUJp(2H%OJ0V7;bUf= zulobQ8WSJBkAM)Qx~)nrQ^IMnYigl%%F4*I6)h(hndM3x`Py)8qk%ZiEl10N@E|je z2-8?MM)5W;nK0XYI@zoWd6R_jfAM!48}UO3^BxkVtTM4r3Rc!55S;E9KrUefw|5wK H>cD#gmhDMp literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/downloader/HttpClientDownloader.class b/webmagic-core/target/classes/us/codecraft/webmagic/downloader/HttpClientDownloader.class new file mode 100644 index 0000000000000000000000000000000000000000..6e86a55dbb1150e2aa6092a4394e8c08fb763a39 GIT binary patch literal 3981 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 literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/pipeline/ConsolePipeline.class b/webmagic-core/target/classes/us/codecraft/webmagic/pipeline/ConsolePipeline.class new file mode 100644 index 0000000000000000000000000000000000000000..dddce50e4aae9b43a1dc2347fde552bc39e2a49d GIT binary patch literal 1914 zcmah~TXz#x7~LmLGr3Hmq!$EHixz08?V!b5Q(L99S{h0f+cFw^QGwU0!EB#f+3<62;iPFCL$TXUv?HISs#&o2`>l600!1%Gl zjZpe#==nTLHh8hXg#lMbw5S!3!eFh4pul82YKM(pL_DJ z;A|AKVS**N1!in9qob}43;m0&Pe^pQ@C4@j8w{$>*!6cR z`wX6A25J*Q4L|HP{adnE~>XA;GT^&6H z?A;i8FPF5@_RL^Q{zOE+nfLh=xX~u=Xg5fmm~ToxQE4*YHJv8&km-eoPUK_Pl;S zjbY9QzajAlhVDH^GC$lxYPJQfg>(y<7P8#r+Rz2s7!lZ-YvYu_&sgK)w7_2&T}&RC zpG&rJMoII8$&YbRl5r)OXk${~1?(^XJW+I$P;@6F8hMf$!wSX`@Kbt3siJ?KXDb}v z!ewgDViQ*|L*k^}bxExXxEi^6K#jKLXEh@c3Q3CJc P66Y+HNBL_`r!xNn`UUvH literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/pipeline/FilePipeline.class b/webmagic-core/target/classes/us/codecraft/webmagic/pipeline/FilePipeline.class new file mode 100644 index 0000000000000000000000000000000000000000..6a28b836d6c7c11cf800c84fa3fa93fa6710793d GIT binary patch literal 3083 zcmb7G`*#yX6#lkNvfE^#B`t*_s6c@}XqTrz3#dSmLMhdjVo}s>GEEjX4>wyViti^X z_3DYfT#_|e0!{x_Zj_{}CM4NVo#NoIEL-1+XEd%w9em#_Z*2Y}Vc2GNTB z8Xl-X3my#O03Oota1f8c)G(+aq9H0rLd8%JA?%k;Og3>9RuGjqD4RpFu~j5gB!fsH z9YO=*K|BgaLneqCsa6eF!?0X?SPqUz#gPz>;;|4O$FUHez>~6hO2yM5EXFe`p4IT2 z{Cr-;3lj20x$q?wF9*?#<0@WJ@v4f~6!_An8&?qSI%pm?4ckn{j9%BVlCgFLfsIzu zayKg|Z)ohN>ef_LD5&hRlA?P!F({lqbI_(F+?9%$cE9OZa-0|X+_;rd(9$)WF(OaV?E2xR5%<%z+U# zUDI$yB7L1qI#ysMadf!#ZbL&aM<-o`r$G%3kY#60j19q-~j1#@mB{gz?N zjtWP|`}jb|hZ0Qpbn@YoPHfO|3a52^gwqPD3$v4w%>z-8%3b7$q2i>DkMW6$Pj!5T z&&j~nxSOyg;ujnYJ9b-zwELxwGt$Oa_*%tT9pB(v72oOj9zUo!q2ots`zQQduw6`5 z9lyw_sv9>(221#JaCw4lCx;ie%spisvC69QKZ+iw0k}?XG z{RcpyJ`^JB?YVFQ70fHWTppWgC*^5TP!SXEw)}aiX=t3vbp`b)CuW#wGZGi9V~Ip6 zneocx>U^Et%TmF@5pqN#by$$=4mY&EL=~F~UeccGh_r1+=-kem0=Y@pfSFEhVEexXfHx1zyUmI!*|Oad zc9bEQRbWfu{K-n^ow|a6q4VyVUO_?>t5a00?&)aq0+DwLYjhEMf$3bM#?4H(7$KrB z>2<}d&2J}{lU;)MoJODfO?z09y^u+|A1*S`#k3OKAF)#zDpqk+-#D#M zVDMiiYb~EZ<@{zvX1j)?O_Z~)BGfbrr72u?0p;g7EW=v1GpP*Bg%7m|Vjk|`NYANb z9oBOsp*G~9dbp~Lva0J)P0dAkVIl$Z^LPvRg1Xhitj(>?) z2CJ55;p=V*`!6EEPR(^%xZ)y$-Qx%ij6!cZkMb;Lge%yz$PbN87Bky??8@x>C0bUj(wc@6T67% z$8Oq^?8@2drma1ctb_k5`c?FJzk9FXfQtK6^!|-q*XTq*MW2ej>Le8?D)t3v?tU&W S!vHq34-$AWU*4Mn75@Miw;V0-l;YlkY+mpGsAw26#h=Q%p{CeM+%4+rbxR$tAgsuLT3&>U$}`kVLesGSRk%>@?|}8?(%0v?)il8 z)IqLA-?H_j<@pr4>u5SJ3e}YQ-_e~uUZ(`vOIhxVDl=RRN16bxbRm>-imu7$Em6jv z29=13t}BSZl#o%taaF-4vJ$owSlCvugDk_|lJnBCZ9^ZA#kKH~VOn|L@wTS4J9(em z8VR)Jl=eUyiEm79j7GGX0#*DzPcK@&K0Y=X8ynHWiwmnu$sx_QcDQz%n>$WKo85Aq z9M?xDV)59>m63RCVq8lZo7Crul>!@C1p^2(biX^FH;a~?;VuIUE69Onn8j#hAIBs( z3JQ2eftlR1ig^D+8)HAp1HhW8zxm_uHM<~mf@zvW6hg< zs_wZRkw@x2)NsqbQ}x|R&#*yeO&TMbNO-7L3x1B)&v4U6>~WjsLaeYdBbFZ}7irv# z2Fmmr3~EcjC33w!>q-*My57JQ#SK;yCU0srG9kW& zWDyJ!jneIBw2=guAACbQ<1GTw5?Z2f(ON>A+FpY68uH+u2tIs+klIm#GNhhRKPcg( zdP+S_2T4?wNC{_Nqw}|NtRbQ*T8VZM?Z!Er#Vw-4B+(9{AqJgp6c_O_O2G--0m3zc z(F(d>$X=jJ5ULON(Zw+MJ39B#9l$<%7?z?#C7g|_z2duiZXf3ZDB(g>y?9{I$HY~j zYJou2McD#<=ph^zsA4gy*folKh%8YRo0sR7x)KdHUIzs literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/schedular/FileCacheQueueSchedular$1.class b/webmagic-core/target/classes/us/codecraft/webmagic/schedular/FileCacheQueueSchedular$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5dd49cb6123788317818c97749aaa9b9b087c0ef GIT binary patch literal 786 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 literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/schedular/QueueSchedular.class b/webmagic-core/target/classes/us/codecraft/webmagic/schedular/QueueSchedular.class new file mode 100644 index 0000000000000000000000000000000000000000..e2a918807194892fbc5c4b46c260af6a929f7ad2 GIT binary patch literal 1866 zcma)7e^(nt6upy#EG!!+P@wjQ1d5P^mThgZDikd#wQAbhrlq#lADhj%ENqjw+11a| z;}lkuc}K@JygP(x zyrqr9fPrRUFEE6_&|q&l|g){#v3}Ou%TvUwS03Jo47TMk79FM!^avv z(eSB;ia^$DI*#-O-l#Nv$Fy3Oy)8`!ukM(YXlYeo;JZ+UQeeKaV|{O#Vc>eE-E7#Q z@5@GDZg@?5*KIiWRTk5Ss;<+pg3xEl=Km;JtAuU#t4rIrz75PDWbL`-xVHH~61N?! zuCr$*^u4ygXkWXk47hOqXk;yRJ*(lE)xamKs64yoHr!xcAYCYKv0IsFs+-%8cf;p3 z=|8k;9wXzGrfqp!mhURR8_WdTF0n5q&}{R>>Y-=(W^@4616Q$bh3##D^+H1F!44Ca zt8O4y6<^Jdk3wK3A@!gWG25&XIGd0d^%Tfe1IymMW3>+U*lK#7!1W}iF_na#J#f9+ z41HVPa@Ao@96gU^B_0FkF>l}w?rOMa;4|Dea2jU>3dc%|A81$Bj|j}bS)3CX>*e3J z+S?R^fjnjnJU~@oI$G^h!A9tMb*1wW^-1zUGf!=WGH>7^9vRreV*{Tn^8`;dd|}`j zzSQuQfy?+>;M{8kDzJR~dXh2(PW1TQtL;cT5Gejvk3(Sz3_3C>dsdsOoG29gBp(GS zyy=9?%*)Br_+krODEzCm_?l;6#BJY{wb0pYsLN50F4I#!Ay%s;8+0%Bx9eWMesXcB z`z1&+ODd0is_x{GJ#;I%%b*$0`2y7yu)t(LM0|451xH5Sac66Ih08%kK-VE_OC literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/schedular/Schedular.class b/webmagic-core/target/classes/us/codecraft/webmagic/schedular/Schedular.class new file mode 100644 index 0000000000000000000000000000000000000000..8674d223a635c9a5dfac142a26327d39ab573c6b GIT binary patch literal 290 zcmZ{fy$*sv5QJwDK`}8thBRJbNwl;wF_FanI97ggiUOzaX5j<)P)3NsN~%p}XTF_% zy&q2iOH5phU3dihVycv|o^MShR1vc(<*^obj!rVkl-Tpta8(CA>oBW1@DDAg(3-I7 z<9v-hl!-ej5y(@>=x8!gL4E^m_H|L<6JHt`D(W^F`hc}~PG%30M8fnYV? U1C~t~zy_K*gwrSlx79KF05nll@&Et; literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/selector/Html.class b/webmagic-core/target/classes/us/codecraft/webmagic/selector/Html.class new file mode 100644 index 0000000000000000000000000000000000000000..de75e23211d21d1ccba195b14b0af5cc46d3a33b GIT binary patch literal 3165 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 F@qY%Ng%SV& literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/selector/RegexResult.class b/webmagic-core/target/classes/us/codecraft/webmagic/selector/RegexResult.class new file mode 100644 index 0000000000000000000000000000000000000000..29cda6206d171ed0ee1d719897d01696ed3d6e87 GIT binary patch literal 739 zcma)(-)q!B5XZlpy!No=kHa45M zv#G%Ho9IM-lwl?(NjNNvbdo$1@OSrLkB;6Bc83SiNZ?UaO~W`pR&gQUmEk8fK9xxt zhf|fQxXg=ipc3_Ypr%z;vfABACu#Xy!0v7z3OFxVDX9jjs_#~EMRQ69_e zP!_3<>qn=2pHf$+dxJ1dvlCSctaSU^HwkZ=x%$TfqA##8EM@#*U!K+Mxt%zxrFp}= zDq^*lY9YZj{g3rJe9Xi5(ZrlU@Be4_(Sk?Z)ka^9Pq-o6=k{Ixip4`Hy>*>R>pMrgpT8n9 z&2Jl0$B@06q&sPOT11;!Gf@XMGw6MT^&1UwuAR*%=cL(2-;BJ<+BK3lu91UFa=?x& nBz8=dXtB-e<=hX93}F5z?4t`fU(wLIg`vB&vzgauEv)|oSLB1! literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/selector/RegexSelector.class b/webmagic-core/target/classes/us/codecraft/webmagic/selector/RegexSelector.class new file mode 100644 index 0000000000000000000000000000000000000000..4330e0cd5f3e5db396e3adfbf6013ab6b76b3051 GIT binary patch literal 3461 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 ZiXS~dxvM|rSx9)SG&AF&1rz)a{sN^Bz&HQ^ literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/selector/Selectable.class b/webmagic-core/target/classes/us/codecraft/webmagic/selector/Selectable.class new file mode 100644 index 0000000000000000000000000000000000000000..422b78720d8c504532b944a5f8a6c8bd2586595b GIT binary patch literal 575 zcmbtROHRWu6r2}I(}Yh;DW4Odb^%_nEP@@YNC@Qwjxmv|kRZo_o{a?u;82Ly;HrzT z0I~6m<(bjE=a0{~cL0|-4RIXegg{He%`{oa7byx^<|1|0l=*y?G__FGgH~2PI`OKr zCz%^1YF%jMDl5{K$gI$FLa?m)s1@OS`Zp&@HcEDrWnxz`_L*@1L#6+g9JuOxIKqTm zc19*dYX#RBuO*E$g-A^8c+My_c`03EHQ}ryxawwJvnfui#wvYl3U&=Qd%IXQAk2Qf zXu@by`Yv1WNA!7d2>45ZxJTGR4`AH(*hkpj2OcAjv47w3xQo43w~t|qBOGwV5EIyJ^lla&z(a`}gII`Q^@d?) z-n@5zTyFqY7e@iu9zqfQfPiO>>`sBPnBS8 p+fuW)oG|_zx=%8Dy-Of;>|=nAL+HW*?Cim{yw|YkTjak`@C2KVTd@ED literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/selector/SelectorFactory.class b/webmagic-core/target/classes/us/codecraft/webmagic/selector/SelectorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..5fd14be15eeb1e2a17687bf8e6526c6eeb868ec4 GIT binary patch literal 4216 zcmbVOX;&L%6n-Wd7zim)pdek4)@mVy#x8atNK3H`il7axMd~sP(~vey;$+fIYZuqL zeCsDa^(WK~RF2h8e()TBfq%v0@wqcYG9j^4;hZ<`d*6GXyWe?#|NEzh0QTX_2-+~K z;d}%k%r;^>-jL-@4R2|9JHoB5VNQdgVO~yV6D}aFVL^T~8ZJiAic1=@5iG*ekc*&0 z@bVhoX@DI;7YZ7j2sUF@Sc|f|+<+?)T*Wmx6g6BIX-FI z(aB^JFYEcFg2q%PZRt+Y=Iun~?XY*u>Q*|Da_o$iPEHgH2_rXe8n%AHNnA1K7WH(- zNEFPhX*fAMk@7dm5rH0`OihnYPmUc|@a*GCp3nv88pZ2}GgihKQ4sFyKdV3;qh9eK zW0{l1#W~ZS*5|UMv`yp;J$qKSGjjHcsq+-P_my-|c9%%qyqO zw0U*aIR(f1szb9bas>wctFr}E?00h#3^R$Y(tK7o%(B|EHPluMKZYR{xHP57HeJ%9 zX*mkS;d6Q2Stx7%Uk+Dbh{IO}R6!T_9NoCYc6WP&6Nr;W!TI6op`pj^hU7?9Bt0E9 zTM>KyZu1O~j#~jz`o-jRx%qsB|TVV>0uSRfs~b6{Uc@KU`TD z!$#I0dXZGFXdC82FWzg$3q5il?wM zie2ba5MO7CS4=9-gSGBQ@iI7{|!F)(nYa8fP@T8^wFLpvw0Y~A zcTIq1>EQCPV43s<+so_Xpk(a{v#lJb8Vnp1oL}zC!F@RFs?hN$|6;*F_>CR#Yh*lywB{8I*1)Zn@RKbgF=wX}dS1Rce6cMqGGYlS zzI_P~`wX9ed?2Y8a~Vs);adJx+f%JD$w%gPzIMTvZb(K96g=&op5Zf;(}w#9X&hBt z2Y4Dmm^+{~whSef8Lu$AB8&fZQ-Rh5M3FEbHRTQgk26~`z-;YL? zODC1=qzQ4V-ovDiaFue{?a1=*yl%CNL{vV@pjSS!z`NEXlgcop}=qGsZK#k+CdH6!#Fc4~O>FLY~o$uHsw+?H>h=dkhz^DPeFi$DAdTL&1q)+KD59OR~L z3GH-K{Cg08sNP540JGIP6K;pbav&3rZ8PC`crT9u*1G%HKfv1YS!dLe0ExZ;OG>Q} zTR{iAX45Z|E9jbOdtz`I-M`QeU>gT~Cwg$o{T;_m_xBc8p?fhNK?^w#(vw5!?0-C+D~F=C&RdKWLcIk>>4Zf1KeFtNXm`@PtpK!?2FJ&?%nKe&hDPOdw>1@@e{y2HdE-tR2nHvcOeN)!Au$n%qo~q z)3TsoQNfaeWr3u3Xg2aQ0*mElL(`qAp}X>(r+qLE>au3)TEnmm-E&;6QkSk*a%|7A zy-KKDBfz?8o8E@NO5s`v#eIQ9iE#yb%BF4XHtPq5yC)AUYI@6#F0Fm(n*MvJO!z4a zKtSELZNn{Dve7W8S-wsJ`B@gB=uZ7ux{TPdWqa6wKSEpR}(cyN3G3_@GJ9^93EvI4H zwH?DdbgBwgR6ND1iY}-sGFVfwj%NbdpxGj)reXun6}%AWYtx4+1~J5$y~fDqNmnFV zi!Fivt0-4=3Cv$30`G*@r6DjHJ>ZJxl8CipzXK#YGNJwEXjV*DFo zU-%Y7mTQtez#MLIRRcMVUJUS!Ba0z=`3Rr5cW@t>_>Q>1ITE{*7t(5CYB+I*4(~G^ z;sI!Pkia5SS|ZeP0KU)y2*C-3VcZDBN0X2|OU?AZ;!G+@*hx zx`))p@F=@UkH@t5iN4|2LGj}g=SWWSIfLRS_HVVhmg8kY8RYRK2#~=jr5MAvLX4ph bAQUmqJ%I^KqMuSPeLA`Oza%-lolN}!3LUgK literal 0 HcmV?d00001 diff --git a/webmagic-core/target/classes/us/codecraft/webmagic/selector/SmartContentSelector.class b/webmagic-core/target/classes/us/codecraft/webmagic/selector/SmartContentSelector.class new file mode 100644 index 0000000000000000000000000000000000000000..0dc2f42a9d1c008510cc6bbfd593bdb8427bd42c GIT binary patch literal 5353 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/HtmlTest.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/HtmlTest.class new file mode 100644 index 0000000000000000000000000000000000000000..7e93aefe6a87503eed3ba03c7c8de7c3d2139ef7 GIT binary patch literal 1028 zcmb7D+iuf95IyT$Y+ScZO3i&PMi-6)DPo{2aj9t}562F`Fy4LOs#dM_R)e(*@h z9%hdTb%y*MH!zO|L$jRwZ*>_oUJOrWU6sD)x z;JQKgb5q4F1GjO9VXeI2F*j;MvU5Tn4V?r>_5>+m+9^9rfHCnE(Xtyy|-f? z(gWB!$*a(=dje?^vHRG-Ed4KXD4^Gl2F(lPIkYlbYwbg@kNLJqb3G3lI8C-u9Ka%$ z$YWThWF=32fht)*>noJ!X5|o7*Q{-u^-oYu%{+Aky@DgmFnoqF#hycjavIPHqe&HH djpYJoQbWfo&fqN7TA@A3WtCQjb2KYB{}a`s0!9D; literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/SpiderTest.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/SpiderTest.class new file mode 100644 index 0000000000000000000000000000000000000000..f41ca615e73245121a91bdd058f178697618f80f GIT binary patch literal 2382 zcmah~U02&i5WQ;%GC~FF03|dKnx>9{U_nS43L$Ai2~gZX;*^wrr9xV4ajcIct>W<7 z=l+@Y!Q_N<`UCo-dO9ol1BwlP(C*I8+_`gicKy%4AN~fgfI}6Z;;u@wdkXHW=t>q} zDtMrxCs{1Y?XMIprLmmGLlr7kp}%6drHJ;5W|=!iEK`%lX36yeF6$_IQDE|C zwiI%prAq$Lcx!05j&TJ$8gAhQ!%TZAecR_1Iul)j?9>+;UZTiwr+r9hNaCTs5xujc zX3ZL2;d>3c7-v{$A9!Ky3~$Op_)EH8tyc4vZFomfmAj?9={b7Yb9mk_`;Q&ZS_yr_ z?Zdlp3Hm|NYJS&cT-mo16o|A--2Awk`2(#0(^Rx5$vT!O= zzSkOlz#g^m`qM21KWg|1KP&h}!>@Rw;Wrox_BEKW7#_4QIi%yWqKXm3`mP$Zd=c>| zKGxXIFs56EFm%Bkzt!QU^wcE>uHgVB>IiwJdE3hi$G7Z2Lm4*1Wc#$OR-gu!fx7G` zeS80qo77zsEz_neco0Os;8yceFkHU~ma^uiI<$9^m|8R4Xe@@!TnFcdi{9wFlE41_}iokYD%jYffQBz7>6m21&oX(2SKIt*mLD4w6 zFXUp)rH77EG0e5e-;sKPe(H>iM0qQ*9i;4S-V}zdPVr42T|SHP{kgnlWU2H@`8*Iu z4B2*^&liu+Fh>8G@^=MvA23ee30mniGHIPY2K$pHDcqoMPi!2(B+a$NfgobcU`H`b3`Sz`kp!R)K1%Fv z;R{NVCC_deZzD%DNoR^ihG|Nkij)6AzB2j73DmtzUq(B|M>1i5W}t?_*MH$-xu_vi z!`1)s8`_KghL15)!zVOPpW!(|$W#;+K0z#RP{ET}Ctj0eP55rq`D%EG8QdXWXIaiR zSuPPrMsXVP$&9|oHDc3JM2#!Rp^vJQ=!w)?9sMk3zKJCI6W>t85R@EU-tmN93b6|N=+kNM#YDk}n+ zs!gjdZSGsmwj+GLA+1)8zWa__-}PKu_`d5cFofGZgW-B|NQzynE*1h}ZCWv0`>!~L zh$p`72wxGYOQjR*rNui+I=m!(MR-^KS;P13H+9_pSL|ZXcC1#NSCl7P^@U~4w=Psg zDx&d8GBt#V-lx!L#qD^u*p&M2rUza?M)Nc90j`FzZeRls7}gf8!)J@jM>7pi94{T- zOdS1~`zhH_s(p|1T(Q1jq| z>rcZQs9=xb>HvBHI|KWA|FrD>ARWizg-q5=mMvShlRLrlkZFs3O+ZV$!2nQbJ@&% z!K_%v)S&%S1`afQ{(tl)6&o~9&;UEt6JaZcJA)JTd)W23?$z`5roTQoUPtv>X-hR7 zN;|ZbeBlr{31KDqZZ{9>-T_$%azeR16;QSq(S1i)Q&z3E zXL%%#C+GT$_hJ7Qpq4TFjzrq-s7)!H8pG-UZbO7Mh?>qA^6jB_-4ko5Nf$oh3$@`k zE!kqo4nQ4tBYizj((#J2Jhku9KQqYM_l37sCkf#OF4F@|&kMcQBQ%quY5b5ZPBWu< zZ00wxUuhA-G>zkd^8!Aiwb2W}HGE7Ky)3v+qdxpIMkyUoOm`8AjhtaLgfomWl+&|a zjHhGaU?Xydi4eMorel-ZaR!5FQ^Sn}a91!!>lmgGCytkqAhz?g((q;vq7P4CrDnxsn@|(&I14d literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/DianpingBlogProcessor.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/DianpingBlogProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..91b7ecaf57e94d59f08cce4d4d5e200af5cd01dc GIT binary patch literal 2047 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 literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/KaichibaProcessor.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/KaichibaProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..fbbfb6a975fe7bb13bc5280c97878944d8986952 GIT binary patch literal 2169 zcmbVNYggMw5WQ<2R*c$!LI|WZ5j1UW94wo6cs~*X#RL)qNg5I&%Zn|LB}I~frtkiu z_KOqRp8kOTsGiQ+ZlDLdJ?#hY&aCHgclOTc_dkCA4Ztvdh~N|4iC_{_5~kZQgITf6 zMKF&Au`GtM6oG_067Guqo>-Q}LN=4QFJVROs}epFj%z|mOIVliKGh9xa zHh)kmX1TYeXDvEW(vG29JGy5Iy>{3f6ilBXl`i?3L5_x}?+4m3&ldH(X=uJ)bS>^{ zYr1I^%&flYIR^KA$D3jZyH$nZX0(C(rk>|h6;Lio488wk$G}Ybty1JX4>D#z4mYB) z1}@@%0ujkLCC}i?rnq6(1(=Bg{YaM)MJ$Z03xOa^p~A{lmTnq@wlH!R)vXZrUYCs#4;e=g$$d3x0syMCMj zGQPlTQc1hT&_3j1n48urQW#&#_zGhT@_BSJzQ#8UeGP$+q{fFv$0t%Uz7>Wo zrC@(>LdJJOIbL^Oo0g?(qlu&%UDplM4jjKQrLNimw^TY%H!|uIHI>{O-y4dl3ocRS zG0(1=(+7#6ty8ceQr@+ zikqnjqTz_FvHDT#7*ih*(dMG*v#V4|IMt{h>I9*TQs7km7&-~;g=h>NXJ_I)^Mc^v zBi$ms<|A~F#xc7$7H4p9@g>aNReqW$2%#Q0lxQKa7J>P4ir=A*wm^jvOB z_vj5C@mD482h=@R>!qMsCLC}aOwZYj&?wLUMs!SHzJ)1rNH0Nk` zkhbk}Zz0d^0DbtFK7qsq`W`mXPQ#Se0n#+uX(pj%;0@SMB!m#BwY736<2K21)c}J? zkVf5%B(1{vSF}(#z>b#@QkqWD9KtDD7~Z0_jBxYInfNb|p1#2)B~nIPZy9nK@0Ia> zT)9jx?MlZfln~0e5?4Aa2Ukzg6@qe2={`kI6O`+J2_Mu1vOPoDMfrht^q_+PIjAE>Ilf{Y-biYNf@?jY_l$&L!N?#fM%133~ V`jPUSuT1y3%5=Z0%y`9W;!l1uIBWm_ literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/MeicanProcessor.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/MeicanProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..aba96f2084657f06fb1003dfa91d57de56d14d52 GIT binary patch literal 2102 zcmb7F?OGE@6n-~+WPueWprUPYi_|83WI*Jjf(WPxB~fbtX(^_YWk?1#yXo$vv|djy zp#2j|fAj)+6TOi>eR^gSQEbxZ@z0!@Gw0(yXU;kE=Rd#y0bm+#H$KAcZra^3G1G%t z%;{ym2VdZ>UKaG-qUPN*v83sJ6U!!6G=J5^0}~Is@d#@s9&5U8Vnfp}O>AnKF_G2u zNgPk(coxT3209m|C)JXHwq$C@K>Gv#Kp41~k)C)`Ef++v#S1QR5*gp&?hX&6J~x={ zsw6`LEK?1cLyAto4;4ERg)%QnhlRXcaYe|oLOR@g7Wj?`LqAwB5U|*`wa<9m8 zDv(}rVTtrF

*~v%C@o9>;SEp(s>NDnd4tOtrwK?@7Bm=T`$qtVx~7f%meJ)?h7s zf}uEa7Phc$;1*+iZ`pBq7~UJ^f#7*pddK#m%T>Ohyy1PeTnfZt96J_XVAsOe_=Z4P z*u%FL_VLm}9^YBu+Suh}dXxo}8eR>!r`X=hoBLxa3kB>N=pck;%Go?)Rrk#0fecF` zw9CS)=IeWM=}Hz>xOXPx@v<1+x8UG_%BT`ZdR+rsA8sg8&HGg)0&;WCM|3s3ABV7T z2u7(aN41o8{IZ22N(Pc8r7CwBJ2^Q?zrAE(iJq{;B_sUwj*bc~NG;z{RfiMv7LN4c zBdeTm2xg$O0houF3!&AbwiD5s@*}L}CWPUDxJ7up_sGwhn!lqPgW_m6? zJ!L01*SE5naod&0!hS5AV?Sj-C3&-01#0T{a zRd!U^QE@&k90^CYG|}iUKVZ6#&RWkv@A=*^aJ@MOtyVAcbyarBPs<_?g-b}tQ!d)* z@jx}7YHqfPuz}c*R5KG>WJkg@w6Bd&BD=k zTRcsD>cq+vN>?bkT?Fq6X29(bq73rA-Vrt(_6GmlOf3E`VX&q?3UWd`7EQ z{tNA74iIBC#1d_%Xpi9(9R{-Fr|6_+{TbGHTgNHlZOD#|*I{m7LS&?d-m%2Rh;iu+LxXFNzzxHseFA;xr>F)9&=sU`6{{FT4%cu%(Q4p!9b5xA z!Ne_mPSE>kOeaYrhEbBz;ng`~#2F`!3FB{!#4$lP=_o@w*j2hUhz|aSzC@yi{=`5H fmlIcNxSANO;o2{B_iplr-bvozS@I?$si}Vfx$r0j literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/NjuBBSProcessor.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/NjuBBSProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..d0bbc96aa0fec30881ba2724a91a10570917bded GIT binary patch literal 1755 zcmb7E?Q$D66g_f2>^Mu>*rm`?=oU(C$Ejr}O#+Rb&o)hoorF3`nF(!Yy;f|c>s_-e zx4?_=8t}&ue((T16vNfpgf_LAVRlB+y}I|FBkj5R^RM6k05FfIalDV2II@_H;qD}I z;CjewPa%f680NKoPumMIENWvZjxX?K4EOcC979phr5IN9yc)$?6zfrJFpL+aE7c0a zNIG-GFuLj01;eGXbj5C`RTKV!RddLbD0{Z$99h29cHcRwnlfPEb~#UA_zQxnIYQl84NemLz4HchFA_MwQ0q0F}})6yaTcoBa>%e@<}wLTs^TJC@tvRpm>!vAm-BHiW85MKnH1 zXNC~b`xF|ldL7>uTT%j?%deOArL8)?2=1Iv!P4<_ipxZ?W#AFE4LrtI26j+p7*kSd#Os{b<*Va0Sudri zj1sO&J>$GN#|gKhb9S*u2kP$`*vG>tzBcd#DTXOR&$*|aoTztlwrik@1BRKVQtkVk zzrD#rf){8SIMf-hE8dUNaV)-&%bV$nWlL9iL37!BOpF|p9Ohot{KhQgUo5?t%b4qJ z63SCi+mVVd%rE8U3uby}`=C;uH68gICNM;iX_|I#BVCKOEg)Awqp!d62|^mXg`TvU(y9yqr*a1}tazc4MTSx=8*^+i#xt+8gIho}V`zMrHm6 D_U^~& literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.class new file mode 100644 index 0000000000000000000000000000000000000000..8472ce3926d5048e35c00316a9c6992c27c68be8 GIT binary patch literal 1874 zcmbVMU0V}J6n-asWPvT}qEJ8Cwzeb&vk3@T0}7&uB@t=>ZN<{bW=vK$yXo%4l>VxE zla^le2lPkv>6zWwQb~Hzn?3WM&v(wAGk^T~+wTD8!AEfs*-==?jUkUY4f9IgQlAB- zUevIp;kLqGDtt#nL4jorD+=G$aBmc=SkrJ{$#o46lzgaRL&--;Y$owIiLV%jmmSZM zcNqp!>3xR5b-yYY&J-O_JZUv5BG}~>mo!Gvx4FB|14rSma!}Ttkl}W*6BMm5 zzx*g;CNvXkp**>455*l<+$uJ&s|R#DV(8CR0n(osYyi6=U?QDV55s!Q3tV_A)( zgRCF-@F436nbxs`uXQ{{S;sE+7>1-HRhi9-+80IZm_X8c@Dm48e6DxJl&ZMmh)v*q$nIvB5I6#JB zym9oNvSO^`CB9>r>RzbbZlAPTIu4b&UGjf&T$fu5*_@dwaoh2vAJz-zW1{4mq%gP3 z=5sTjJ6t-POPgy=8n0)fvgJr?VSXt)pEpxmo4cjrtm!&$g!xF=Z~U~mUJv|+u;v!C zxorMcK9^lwFw6WEjdC|i$M>rI;{Tgs8nkH6qFLFlycV`(xY;{bciR2HI_7XemOk+#nY3n0ZaBiNGOYF>*JlxXaf?!h zHVrn_-V3OueL5d+d7?q>9|?tg;5WGAG30ub@7J5|Loi0+WyyoMoK9$u-oCXOEg3$+ z$Mn_{33~VkNYXn%->ZZyl8ofgjbFgt(IJ6r^c{|r8_P_#Fl* z9Z<@2kT}Kw{e{6}3?*=kVMf~74w4x|Q&wZ-7^4YvFqSd&*!?3G!*POVjI&W7*%gU_ zh{PqL0T`IX1Tj93SzJJYP!UrRF*7dSB}O!G9iJ1mNi5+D%+OU*6tC#Vnlxz`ZXna8 ozY<|!;#ZtAj1DG@^Br6;COeq=nF3FC;_``3O#I!6*~shWUx?`FDgXcg literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/OschinaPageProcesser.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/OschinaPageProcesser.class new file mode 100644 index 0000000000000000000000000000000000000000..a7daed0c624f44b5885a65ace6967a6848c0ad43 GIT binary patch literal 1847 zcmb7EZC4XV6n-|mB*0c>v9zMKTWd=~Fq81A1`rBGlptt8?E&f;HbXMH*-dvR#77liQInq2FFSMZ-22?;&faJK`umSR0nFl?VT>a^jA`6RATt7n ztp4P*XC{H!1m?6oukD2d78AIs?OVgRjeG)2dR!V9ACw;9><1(!6oTQ zwPK(znR;xXf88$$1Lq6U6A$Xu6A|q56PG+z!FRa(m;5#A=MUXcTueA&VpC)@C=#+fKt42EmSN!S}V-U0i=BcBy5%+$*zU1ejmZbjv~&r6Lwr zlc^p&^f`qN7yWwRh)t<)?ozk*Gn$@>k8vrEuT5;?u7Qmue)#Ru%JEbs5U0zB*CvmD z%>9(CC{?@7SfkN6%J{8|Jj!@NvG3|4RMPj@;Zfr_oodI&v1Q^O?wi;~!Nd+87#L7e zX(pE$E6JCKtB%XVaC!3KzIIO@vr3K;mtCE-hlkXu<9kYYiYUF4(Jo0jZy~L>;>q2K zUlNK-cke?A@aM)Xrs}Ek2t`*=sc#y(i*iTPij`yO^2H*~#s#{hh+J?aCLz zzAKy;e#&021b$VpnT1R?lbg$BGYj)}k)P6-x3f$<)#YdY|Af;JMl%@A(eBA};n0QN z=#JA?f*-IBk@$guiSF?_sx^^Ys_GJK&xs6$ON9xz7;Ut8X+TrmVY>tyhy|plJIVJ& z(MtqfP^jdP@>^meG>hoIr_WJdD(&-tRQ5=hO3an~))$EtMUL!nR`ew9nlK(zDY1`O<^r<)i|Tk+^1afYE7nix)7Bay>A!v~Q=7wn4) zj$?rK7Dh2fOfO=R7~iCwCSbRUvgO6!7)27F<2q6Pf}%9dmgh_I7=)0duco;i m*}&NEIA@)2;(|5Wgk_C2aq$;A?(BG?qvNrEJ5EJWQ~v<*1n3_C literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/QzoneBlogProcessor.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/samples/QzoneBlogProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..a25a4a7e5176d4205e14c019c0375ff1e3d1eee1 GIT binary patch literal 1764 zcmb7EZFdq!6n=)hK*&}NsnJ@k>q`rS$N({+74l{@#s*B3B=(#%dX{AZ6Bm~54$|7w z-_gI(exarx`UCo-db|Ue+6H<~KkUrhJ9qB$+}Y>OpMU-S2Y`7z5910}y3n8!Pr4W|&yb{D}5Nko)XBf}RhE&T8 zBeD2C!|1wO5e(-GvLT+d>Sf{WT4jekk%DVm&c5YIZTFp{swRDgOrhm-n-1EZb)vN`2sV2L!}ZvZ^E*~mZY`$kZR-?*G%9D+1ZdvoK3RRMd zXnYon4ELGc z@W=E|v6@oNdz`1UmDVv4sYt8wZPIq@yy^OiAH2AAIJ*+>2M4iX;1MqPQM%1`yPee7 z`qS_RO4wz%Jb+%8oq;{Q-!8guq~ln8A(=8`Maz~A<@&Xp`Is0uCOORQlKG99PQA>& z%*4&LCduWwC~rx{7v{6c`Lr3^+T1M`=1fPv66PaezjEW|dd+j|f@cMSDO-f-o@uEmt5Vsu zJZg+*r=2(5hyARsXd!5wIPL5VOSl&ZAeQEqNXzje0%6!_u4d2rwgC(g?ixD zE!iMF3_u-rBmGXEq~j%Jd1}w2e`b)i=L>JGO8tWy_?X^hdRXX@9-*1qnZ{4Z;xsdw z$7X*6`;`^}T%mEi>pX`~X>IfZa240cqBjNCY1D^*#weu&vWX4?k&zRO25^EghGJr_ zgYiTp*xd-7U?PAH!imVFcAUUq+SG6(UAP&H(fT5$h~W&eixR&@g3$10526oGVC1<$ z1g7u>ZsHaZzD-e@WY6C zMrmes%;}g{@`92-*YSlC9_d)rv7}>JNh>;5b*!o5`XDy2spGNQztpj%_H7+IYJU>N zS5fRnk<-w>WY=xEqM;{|e5Rpy(=7`Pw{mt}JZ;uW!aL$6hcvOAYjNip_iQDH%3fKu zeGS=M(`ObrS{^@_?2RbZc*VAu&ua}w_$+VN`G(_G4m{TqzAwB*4beth&@h?k;(ov@ zVlg1qpp%A)|H4tkija9*67XIk*#)ZXlzcGnHa$yh*{ZU!f6+_7;`!Vmh^&4AD^> z82B282J$#Ea182qpR}bSG09ljetoiLIo$V`(W@3+9c3rxDb>DaG?xhG^afot@2Q((`j>o}bg)hF%6rDn0w3BTI#< zsbCJTSJ-~(rLd%ihn<6jqwRW3jc_>iuBTzVGhU(E^SdK!4u$PHzrJuNF$K;C2lW(b zoRgiyb^vRLcyzz3iQIKDdFk2p%3`-C(;*6_9FT6?kD|qhZV;|1ZHMJ-UlL%1m&-@o zqc?ddzHbU&5^yw3dyP}CTf3k+Y&7MTEu6B3wGQ06yyi~SRK$pHQCRACt7VbGuK^*KeP{0GP%~5-FsU$RL}*L_cykYlcaa$tPeZ zaL&Y2CO)6Qv zTlKQ=S9#f`OseQP+NuS(w7 z;w!u=R(#J9N(q0KA>IrFhOtZs0JCK_kkzCW!|1>22vKQYHmam(U-3DA$?cYwu3eN$ z6W#Fd4Qw@kG%@~1Z6S06%3Rt&Y}5p=q}Od*HF;xg(Q&y_b7{2^ zl$(6n!fgX}2Y1N@Wv{Yj;T{&^xNo6|afYFq*3B6zEUUZ@E;R2nYzq&tY~dl6iSxf* zKo=F?(8;tbE$anA+dwL7`BnjrTR@`2NpA-q3a6h zhS5Xo6sg=#zz2{feV1ru=#PgKZF(ZZQ5+)ygE)gR`WmC|LXlzSBxM**VZ1H!N)Q7B epRgx2u#LTD*!Q0H>~3{rSE~a*TRk0Ao%s&yUYW=M literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/selector/HtmlCleanerTest.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/selector/HtmlCleanerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..c8f064c223c01c78b73c292b7bdade037b41a177 GIT binary patch literal 1215 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 literal 0 HcmV?d00001 diff --git a/webmagic-core/target/test-classes/us/codecraft/webmagic/selector/XpathSelectorTest.class b/webmagic-core/target/test-classes/us/codecraft/webmagic/selector/XpathSelectorTest.class new file mode 100644 index 0000000000000000000000000000000000000000..d8598eb555ed1e319473065d4e72c1b13297f4d7 GIT binary patch literal 145948 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 literal 0 HcmV?d00001 diff --git a/webmagic-plugin/pom.xml b/webmagic-plugin/pom.xml new file mode 100644 index 00000000..6a554bf8 --- /dev/null +++ b/webmagic-plugin/pom.xml @@ -0,0 +1,67 @@ + + + us.codecraft + 0.0.1-SNAPSHOT + 4.0.0 + + webmagic-plugin + + + + us.codecraft + webmagic-core + 0.0.1-SNAPSHOT + + + junit + junit + 4.7 + test + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + UTF-8 + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.0-beta-7 + + + + + + \ No newline at end of file diff --git a/webmagic-samples/pom.xml b/webmagic-samples/pom.xml new file mode 100644 index 00000000..e3a846a3 --- /dev/null +++ b/webmagic-samples/pom.xml @@ -0,0 +1,68 @@ + + + + us.codecraft + 0.0.1-SNAPSHOT + 4.0.0 + + webmagic-samples + + + + us.codecraft + webmagic-core + 0.0.1-SNAPSHOT + + + junit + junit + 4.7 + test + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + UTF-8 + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.0-beta-7 + + + + + + \ No newline at end of file diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java new file mode 100644 index 00000000..efd1ff7e --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiandianBlogProcessor.java @@ -0,0 +1,29 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午8:08 + */ +public class DiandianBlogProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + List requests = page.getHtml().rs("]*href=[\"']{1}(http://17dujingdian\\.com/post/[^#]*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + page.putField("title",page.getHtml().x("//div[@id='content']//h2/a")); + page.putField("content",page.getHtml().sc()); + } + + @Override + public Site getSite() { + return Site.me().setDomain("www.diandian.com").setStartUrl("http://17dujingdian.com/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java new file mode 100644 index 00000000..dd601adb --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DianpingBlogProcessor.java @@ -0,0 +1,33 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午8:08 + */ +public class DianpingBlogProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + List requests = page.getHtml().rs("]*href=[\"']{1}(/shop/.*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + requests = page.getHtml().rs("]*href=[\"']{1}(/search/category/.*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + if (page.getUrl().toString().contains("shop")){ + page.putField("title", page.getHtml().x("//h1[@class='shop-title']")); + page.putField("content", page.getHtml().sc()); + } + } + + @Override + public Site getSite() { + return Site.me().setDomain("www.dianping.com").setStartUrl("http://www.dianping.com/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java new file mode 100644 index 00000000..05b68b66 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/DiaoyuwengProcessor.java @@ -0,0 +1,33 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午8:08 + */ +public class DiaoyuwengProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + List requests = page.getHtml().rs("]*href=[\"']{1}(/shop/.*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + requests = page.getHtml().rs("]*href=[\"']{1}(/search/category/.*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + if (page.getUrl().toString().contains("shop")){ + page.putField("title", page.getHtml().x("//h1[@class='shop-title']")); + page.putField("content", page.getHtml().sc()); + } + } + + @Override + public Site getSite() { + return Site.me().setDomain("www.dianping.com").setStartUrl("http://www.dianping.com/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/F58PageProcesser.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/F58PageProcesser.java new file mode 100644 index 00000000..78211c4c --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/F58PageProcesser.java @@ -0,0 +1,28 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午1:48 + */ +public class F58PageProcesser implements PageProcessor { + + @Override + public void process(Page page) { + List strings = page.getHtml().rs("]*href=[\"']{1}(/yewu/.*?)[\"']{1}").toStrings(); + page.addTargetRequests(strings); + page.putField("title",page.getHtml().r("(.*)")); + page.putField("body",page.getHtml().x("//dd[@class='w133']")); + } + + @Override + public Site getSite() { + return Site.me().setDomain("sh.58.com").setStartUrl("http://sh.58.com/"); //To change body of implemented methods use File | Settings | File Templates. + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/HuxiuProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/HuxiuProcessor.java new file mode 100644 index 00000000..82552f95 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/HuxiuProcessor.java @@ -0,0 +1,29 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午8:08 + */ +public class HuxiuProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + List requests = page.getHtml().rs("\"']*href=[\"']{1}([/]{0,1}article[^<>#\"']*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + page.putField("title",page.getHtml().x("//div[@class='neirong']//h1[@class='ph xs5']")); + page.putField("content",page.getHtml().sc()); + } + + @Override + public Site getSite() { + return Site.me().setDomain("www.huxiu.com").setStartUrl("http://www.huxiu.com/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/KaichibaProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/KaichibaProcessor.java new file mode 100644 index 00000000..58a2cb81 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/KaichibaProcessor.java @@ -0,0 +1,27 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; + +/** + * User: cairne + * Date: 13-5-20 + * Time: 下午5:31 + */ +public class KaichibaProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + int i = Integer.valueOf(page.getUrl().r("shop/(\\d+)").toString()) + 1; + page.addTargetRequests("http://kaichiba.com/shop/"+i); + page.putField("title",page.getHtml().x("//Title")); + page.putField("items", page.getHtml().xs("//li[@class=\"foodTitle\"]").rp("^\\s+", "").rp("\\s+$", "").rp(".*?", "")); + } + + @Override + public Site getSite() { + return Site.me().setDomain("kaichiba.com").setStartUrl("http://kaichiba.com/shop/41725781").setEncoding("utf-8"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/MeicanProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/MeicanProcessor.java new file mode 100644 index 00000000..637aec17 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/MeicanProcessor.java @@ -0,0 +1,33 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-5-20 + * Time: 下午5:31 + */ +public class MeicanProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + List requests = page.getHtml().xs("//a[@class=\"area_link flat_btn\"]/@href").toStrings(); + if (requests.size() > 2) { + requests = requests.subList(0, 2); + } + page.addTargetRequests(requests); + page.addTargetRequests(page.getHtml().as().rs("(.*/restaurant/[^#]+)").toStrings()); + page.putField("items", page.getHtml().xs("//ul[@class=\"dishes menu_dishes\"]/li/span[@class=\"name\"]")); + page.putField("prices", page.getHtml().xs("//ul[@class=\"dishes menu_dishes\"]/li/span[@class=\"price_outer\"]/span[@class=\"price\"]")); + } + + @Override + public Site getSite() { + return Site.me().setDomain("meican.com").setStartUrl("http://www.meican.com/shanghai/districts").setEncoding("utf-8"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java new file mode 100644 index 00000000..ca46de67 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/NjuBBSProcessor.java @@ -0,0 +1,28 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午8:08 + */ +public class NjuBBSProcessor implements PageProcessor { + @Override + public void process(Page page) { + List requests = page.getHtml().rs("]*href=(bbstcon\\?board=Pictures&file=[^>]*)").toStrings(); + page.addTargetRequests(requests); + page.putField("title",page.getHtml().x("//div[@id='content']//h2/a")); + page.putField("content",page.getHtml().sc()); + } + + @Override + public Site getSite() { + return Site.me().setDomain("bbs.nju.edu.cn").setStartUrl("http://bbs.nju.edu.cn/board?board=Pictures"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java new file mode 100644 index 00000000..2166d9b1 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.java @@ -0,0 +1,30 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午1:48 + */ +public class OschinaBlogPageProcesser implements PageProcessor { + + @Override + public void process(Page page) { + List strings = page.getHtml().as().r("(http://my\\.oschina\\.net)").toStrings(); + page.addTargetRequests(strings); + page.putField("title", page.getHtml().xs("//div[@class='BlogEntity']/div[@class='BlogTitle']/h1")); + page.putField("content", page.getHtml().sc()); + page.putField("author", page.getUrl().r("my\\.oschina\\.net/(\\w+)/blog/\\d+")); + } + + @Override + public Site getSite() { + return Site.me().setDomain("my.oschina.net").setStartUrl("http://www.oschina.net/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java new file mode 100644 index 00000000..cdfbc1e0 --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/OschinaPageProcesser.java @@ -0,0 +1,29 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午1:48 + */ +public class OschinaPageProcesser implements PageProcessor { + + @Override + public void process(Page page) { + List strings = page.getHtml().rs("]*href=[\"']{1}(http://www\\.oschina\\.net/question/[\\w]+)[\"']{1}").toStrings(); + page.addTargetRequests(strings); + page.putField("title", page.getHtml().x("//div[@class='QTitle']/h1/a")); + page.putField("content", page.getHtml().xs("//div[@class='Question']//div[@class='Content']/div[@class='detail']")); + } + + @Override + public Site getSite() { + return Site.me().setDomain("www.oschina.net").setStartUrl("http://www.oschina.net/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java new file mode 100644 index 00000000..67ef671e --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/QzoneBlogProcessor.java @@ -0,0 +1,32 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午8:08 + */ +public class QzoneBlogProcessor implements PageProcessor { + @Override + public void process(Page page) { + //http://progressdaily.diandian.com/post/2013-01-24/40046867275 + + //http://b1.cnc.qzone.qq.com/cgi-bin/blognew/get_abs?hostUin=233017404&uin=233017404&blogType=0&statYear=2013&source=0&statYear=2013&g_tk=291639571&g_tk=291639571&reqInfo=7&pos=0&num=15&source=0&rand=0.46480297949165106 + // &cateName=&cateHex=&statYear=2013&reqInfo=7&pos=0&num=15&sortType=0&source=0&rand=0.46480297949165106&g_tk=291639571&verbose=1&ref=qzone + List requests = page.getHtml().rs("]*href=[\"']{1}(http://17dujingdian\\.com/post/[^#]*?)[\"']{1}").toStrings(); + page.addTargetRequests(requests); + page.putField("title",page.getHtml().x("//div[@id='content']//h2/a")); + page.putField("content",page.getHtml().sc()); + } + + @Override + public Site getSite() { + return Site.me().setDomain("www.diandian.com").setStartUrl("http://17dujingdian.com/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java new file mode 100644 index 00000000..b86fff8f --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/SinaBlogProcesser.java @@ -0,0 +1,29 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午1:48 + */ +public class SinaBlogProcesser implements PageProcessor { + + @Override + public void process(Page page) { + page.addTargetRequests(page.getHtml().rs("]*href=[\"']{1}(http://blog\\.sina\\.com\\.cn/s/blog_.*?)[\"']{1}").toStrings()); + page.putField("title", page.getHtml().x("//div[@class='articalTitle']/h2")); + page.putField("body",page.getHtml().sc()); + //x("//dd[@class='w133']") + page.putField("date",page.getHtml().x("//div[@id='articlebody']//span[@class='time SG_txtc']").r("\\((.*)\\)")); + page.putField("tags",page.getHtml().xs("//td[@class='blog_tag']/h3/a")); + } + + @Override + public Site getSite() { + return Site.me().setDomain("blog.sina.com.cn").setStartUrl("http://blog.sina.com.cn/"). + setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); + } +} diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java new file mode 100644 index 00000000..7a8920be --- /dev/null +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/samples/TianyaPageProcesser.java @@ -0,0 +1,28 @@ +package us.codecraft.webmagic.samples; + +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 下午1:48 + */ +public class TianyaPageProcesser implements PageProcessor { + + @Override + public void process(Page page) { + List strings = page.getHtml().rs("]*href=[\"']{1}(/post-free.*?\\.shtml)[\"']{1}").toStrings(); + page.addTargetRequests(strings); + page.putField("title", page.getHtml().x("//div[@id='post_head']//span[@class='s_title']//b")); + page.putField("body",page.getHtml().sc()); + } + + @Override + public Site getSite() { + return Site.me().setDomain("http://bbs.tianya.cn/").setStartUrl("http://bbs.tianya.cn/"); //To change body of implemented methods use File | Settings | File Templates. + } +} diff --git a/webmagic-samples/src/test/java/us/codecraft/webmagic/HtmlTest.java b/webmagic-samples/src/test/java/us/codecraft/webmagic/HtmlTest.java new file mode 100644 index 00000000..f7990984 --- /dev/null +++ b/webmagic-samples/src/test/java/us/codecraft/webmagic/HtmlTest.java @@ -0,0 +1,20 @@ +package us.codecraft.webmagic; + +import org.junit.Assert; +import org.junit.Test; +import us.codecraft.webmagic.selector.Html; + +/** + * User: cairne + * Date: 13-4-21 + * Time: 上午8:42 + */ +public class HtmlTest { + + @Test + public void testRegexSelector() { + Html selectable = new Html("aaaaaaab"); + Assert.assertEquals("abbabbab", (selectable.r("(.*)").rp("aa(a)", "$1bb").toString())); + + } +} diff --git a/webmagic-samples/src/test/java/us/codecraft/webmagic/SpiderTest.java b/webmagic-samples/src/test/java/us/codecraft/webmagic/SpiderTest.java new file mode 100644 index 00000000..5cb9848f --- /dev/null +++ b/webmagic-samples/src/test/java/us/codecraft/webmagic/SpiderTest.java @@ -0,0 +1,131 @@ +package us.codecraft.webmagic; + +import org.junit.Ignore; +import org.junit.Test; +import us.codecraft.webmagic.pipeline.FilePipeline; +import us.codecraft.webmagic.processor.SimplePageProcessor; +import us.codecraft.webmagic.samples.HuxiuProcessor; +import us.codecraft.webmagic.schedular.FileCacheQueueSchedular; + +/** + * User: cairne + * Date: 13-4-20 + * Time: 下午7:46 + */ +public class SpiderTest { + + + @Test + public void testSpider() throws InterruptedException { + Spider me = Spider.me().pipeline(new FilePipeline()).processor(new HuxiuProcessor()); + me.run(); + } + + @Test + public void testGlobalSpider(){ +// PageProcessor pageProcessor = new MeicanProcessor(); +// Spider.me().pipeline(new FilePipeline()).schedular(new FileCacheQueueSchedular(pageProcessor.getSite(),"/data/temp/webmagic/cache/")). +// processor(pageProcessor).run(); + SimplePageProcessor pageProcessor2 = new SimplePageProcessor("http://www.diaoyuweng.com/home.php?mod=space&uid=88304&do=thread&view=me&type=thread&from=space", "http://www.diaoyuweng.com/thread-*-1-1.html"); + pageProcessor2.getSite().setEncoding("GBK"); + System.out.println(pageProcessor2.getSite().getEncoding()); + Spider.me().pipeline(new FilePipeline()).schedular(new FileCacheQueueSchedular(pageProcessor2.getSite(),"/data/temp/webmagic/cache/")). + processor(pageProcessor2).run(); + + + } + + @Test + public void test(){ + System.out.println(System.getProperty("java.io.tmpdir")); + } + + + @Ignore + @Test + public void languageSchema() { + + + /** + * + * _hrefs = rs("]*href=[\"']{1}(/yewu/.*?)[\"']{1}") + * title = r(""(.*)"") + * body = x("//dd[@class='w133']") + * + * site.domain = "sh.58.com" + * site.ua="" + * site.cookie="aa:bb" + * + */ + + /** + * + * + * if (page == r('') && refer(1) == 1) { + * + * type = _refer(1) + * content = _text.t().c() + * title = x("asd@asd").r("",1) + * body[r(_currentUrl).g(1)] = body[r(_currentUrl).g(1)] + (x("").r("",1,2).c()) + * + * body=body[r(_currentUrl).g(1)] + * tags[%] = (tags[%] + xs('')) . r('') + * + * _targetUrls.add('' + x('').r('')) + * _sourceUrls.add() + * _header.put("",""); + * _cookie.add("asdsadasdsa"); + * + * + * } + * + * _cookie.add(_cookie['']) + * + * if (page == r('') && refer(1) == 1) + * ( + * _targetUrl = '' + x('') & r('') + * _sourceUrl = '' + * ) + * + */ + + /** + * + * + * + * + * + * + * + * + * + * + */ + + /** + * + * if (model.url('') && model.refer(1) == 1) + * ( + * + * model.set(type, model.refer(1)) + * content = t(_html) > c() + * title = x(_html, 'asd@asd') > r('',1) + * body[r(_currentUrl).g(1)] = body[r(_currentUrl).g(1)] + (x('') > r('',1,2) > c()) | x('') + * tags[%] = tags + xs('') > r('') + * model.setTargetUrl(); + * + * _targetUrl = '' + x('') & r('') + * _sourceUrl = '' + * ) + * + * _cookie.add(_cookie['']) + * + * if (page == r('') && refer(1) == 1) + * ( + * _targetUrl = '' + x('') & r('') + * _sourceUrl = '' + * ) + * + */ + } +} diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/DiandianBlogProcessor.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/DiandianBlogProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..a9908a8c0e137f48e9966090edc41cc8840646fa GIT binary patch literal 1773 zcmbVMZFd?)6n=)hK*-uQP-~6VZeJ7#DFdMdZQh$SO${`$B&p}bv}ai+FzLeL?$G#h z{2l%c{eq1j`~m(bPwy-=RttXc!_LgTbLT$KoxRWe`Pc7%0LbHM6z^juiZo^;xHE|i zxE`|FlZ#+3g1olxYP%4@yf%tae2y<7xToiZ2p09c6v48dSHf5gV=avP4C9NkCDk&+ zNHTT6FuLy61jEIWY>CI6W>t85R@EU-tmN93b6|N=+kNM#YDk}n+ zs!gjdZSGsmwj+GLA+1)8zWa__-}PKu_`d5cFofGZgW-B|NQzynE*1h}ZCWv0`>!~L zh$p`72wxGYOQjR*rNui+I=m!(MR-^KS;P13H+9_pSL|ZXcC1#NSCl7P^@U~4w=Psg zDx&d8GBt#V-lx!L#qD^u*p&M2rUza?M)Nc90j`FzZeRls7}gf8!)J@jM>7pi94{T- zOdS1~`zhH_s(p|1T(Q1jq| z>rcZQs9=xb>HvBHI|KWA|FrD>ARWizg-q5=mMvShlRLrlkZFs3O+ZV$!2nQbJ@&% z!K_%v)S&%S1`afQ{(tl)6&o~9&;UEt6JaZcJA)JTd)W23?$z`5roTQoUPtv>X-hR7 zN;|ZbeBlr{31KDqZZ{9>-T_$%azeR16;QSq(S1i)Q&z3E zXL%%#C+GT$_hJ7Qpq4TFjzrq-s7)!H8pG-UZbO7Mh?>qA^6jB_-4ko5Nf$oh3$@`k zE!kqo4nQ4tBYizj((#J2Jhku9KQqYM_l37sCkf#OF4F@|&kMcQBQ%quY5b5ZPBWu< zZ00wxUuhA-G>zkd^8!Aiwb2W}HGE7Ky)3v+qdxpIMkyUoOm`8AjhtaLgfomWl+&|a zjHhGaU?Xydi4eMorel-ZaR!5FQ^Sn}a91!!>lmgGCytkqAhz?g((q;vq7P4CrDnxsn@|(&I14d literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/DianpingBlogProcessor.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/DianpingBlogProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..91b7ecaf57e94d59f08cce4d4d5e200af5cd01dc GIT binary patch literal 2047 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 literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/KaichibaProcessor.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/KaichibaProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..fbbfb6a975fe7bb13bc5280c97878944d8986952 GIT binary patch literal 2169 zcmbVNYggMw5WQ<2R*c$!LI|WZ5j1UW94wo6cs~*X#RL)qNg5I&%Zn|LB}I~frtkiu z_KOqRp8kOTsGiQ+ZlDLdJ?#hY&aCHgclOTc_dkCA4Ztvdh~N|4iC_{_5~kZQgITf6 zMKF&Au`GtM6oG_067Guqo>-Q}LN=4QFJVROs}epFj%z|mOIVliKGh9xa zHh)kmX1TYeXDvEW(vG29JGy5Iy>{3f6ilBXl`i?3L5_x}?+4m3&ldH(X=uJ)bS>^{ zYr1I^%&flYIR^KA$D3jZyH$nZX0(C(rk>|h6;Lio488wk$G}Ybty1JX4>D#z4mYB) z1}@@%0ujkLCC}i?rnq6(1(=Bg{YaM)MJ$Z03xOa^p~A{lmTnq@wlH!R)vXZrUYCs#4;e=g$$d3x0syMCMj zGQPlTQc1hT&_3j1n48urQW#&#_zGhT@_BSJzQ#8UeGP$+q{fFv$0t%Uz7>Wo zrC@(>LdJJOIbL^Oo0g?(qlu&%UDplM4jjKQrLNimw^TY%H!|uIHI>{O-y4dl3ocRS zG0(1=(+7#6ty8ceQr@+ zikqnjqTz_FvHDT#7*ih*(dMG*v#V4|IMt{h>I9*TQs7km7&-~;g=h>NXJ_I)^Mc^v zBi$ms<|A~F#xc7$7H4p9@g>aNReqW$2%#Q0lxQKa7J>P4ir=A*wm^jvOB z_vj5C@mD482h=@R>!qMsCLC}aOwZYj&?wLUMs!SHzJ)1rNH0Nk` zkhbk}Zz0d^0DbtFK7qsq`W`mXPQ#Se0n#+uX(pj%;0@SMB!m#BwY736<2K21)c}J? zkVf5%B(1{vSF}(#z>b#@QkqWD9KtDD7~Z0_jBxYInfNb|p1#2)B~nIPZy9nK@0Ia> zT)9jx?MlZfln~0e5?4Aa2Ukzg6@qe2={`kI6O`+J2_Mu1vOPoDMfrht^q_+PIjAE>Ilf{Y-biYNf@?jY_l$&L!N?#fM%133~ V`jPUSuT1y3%5=Z0%y`9W;!l1uIBWm_ literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/MeicanProcessor.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/MeicanProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..aba96f2084657f06fb1003dfa91d57de56d14d52 GIT binary patch literal 2102 zcmb7F?OGE@6n-~+WPueWprUPYi_|83WI*Jjf(WPxB~fbtX(^_YWk?1#yXo$vv|djy zp#2j|fAj)+6TOi>eR^gSQEbxZ@z0!@Gw0(yXU;kE=Rd#y0bm+#H$KAcZra^3G1G%t z%;{ym2VdZ>UKaG-qUPN*v83sJ6U!!6G=J5^0}~Is@d#@s9&5U8Vnfp}O>AnKF_G2u zNgPk(coxT3209m|C)JXHwq$C@K>Gv#Kp41~k)C)`Ef++v#S1QR5*gp&?hX&6J~x={ zsw6`LEK?1cLyAto4;4ERg)%QnhlRXcaYe|oLOR@g7Wj?`LqAwB5U|*`wa<9m8 zDv(}rVTtrF

*~v%C@o9>;SEp(s>NDnd4tOtrwK?@7Bm=T`$qtVx~7f%meJ)?h7s zf}uEa7Phc$;1*+iZ`pBq7~UJ^f#7*pddK#m%T>Ohyy1PeTnfZt96J_XVAsOe_=Z4P z*u%FL_VLm}9^YBu+Suh}dXxo}8eR>!r`X=hoBLxa3kB>N=pck;%Go?)Rrk#0fecF` zw9CS)=IeWM=}Hz>xOXPx@v<1+x8UG_%BT`ZdR+rsA8sg8&HGg)0&;WCM|3s3ABV7T z2u7(aN41o8{IZ22N(Pc8r7CwBJ2^Q?zrAE(iJq{;B_sUwj*bc~NG;z{RfiMv7LN4c zBdeTm2xg$O0houF3!&AbwiD5s@*}L}CWPUDxJ7up_sGwhn!lqPgW_m6? zJ!L01*SE5naod&0!hS5AV?Sj-C3&-01#0T{a zRd!U^QE@&k90^CYG|}iUKVZ6#&RWkv@A=*^aJ@MOtyVAcbyarBPs<_?g-b}tQ!d)* z@jx}7YHqfPuz}c*R5KG>WJkg@w6Bd&BD=k zTRcsD>cq+vN>?bkT?Fq6X29(bq73rA-Vrt(_6GmlOf3E`VX&q?3UWd`7EQ z{tNA74iIBC#1d_%Xpi9(9R{-Fr|6_+{TbGHTgNHlZOD#|*I{m7LS&?d-m%2Rh;iu+LxXFNzzxHseFA;xr>F)9&=sU`6{{FT4%cu%(Q4p!9b5xA z!Ne_mPSE>kOeaYrhEbBz;ng`~#2F`!3FB{!#4$lP=_o@w*j2hUhz|aSzC@yi{=`5H fmlIcNxSANO;o2{B_iplr-bvozS@I?$si}Vfx$r0j literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/NjuBBSProcessor.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/NjuBBSProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..d0bbc96aa0fec30881ba2724a91a10570917bded GIT binary patch literal 1755 zcmb7E?Q$D66g_f2>^Mu>*rm`?=oU(C$Ejr}O#+Rb&o)hoorF3`nF(!Yy;f|c>s_-e zx4?_=8t}&ue((T16vNfpgf_LAVRlB+y}I|FBkj5R^RM6k05FfIalDV2II@_H;qD}I z;CjewPa%f680NKoPumMIENWvZjxX?K4EOcC979phr5IN9yc)$?6zfrJFpL+aE7c0a zNIG-GFuLj01;eGXbj5C`RTKV!RddLbD0{Z$99h29cHcRwnlfPEb~#UA_zQxnIYQl84NemLz4HchFA_MwQ0q0F}})6yaTcoBa>%e@<}wLTs^TJC@tvRpm>!vAm-BHiW85MKnH1 zXNC~b`xF|ldL7>uTT%j?%deOArL8)?2=1Iv!P4<_ipxZ?W#AFE4LrtI26j+p7*kSd#Os{b<*Va0Sudri zj1sO&J>$GN#|gKhb9S*u2kP$`*vG>tzBcd#DTXOR&$*|aoTztlwrik@1BRKVQtkVk zzrD#rf){8SIMf-hE8dUNaV)-&%bV$nWlL9iL37!BOpF|p9Ohot{KhQgUo5?t%b4qJ z63SCi+mVVd%rE8U3uby}`=C;uH68gICNM;iX_|I#BVCKOEg)Awqp!d62|^mXg`TvU(y9yqr*a1}tazc4MTSx=8*^+i#xt+8gIho}V`zMrHm6 D_U^~& literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/OschinaBlogPageProcesser.class new file mode 100644 index 0000000000000000000000000000000000000000..8472ce3926d5048e35c00316a9c6992c27c68be8 GIT binary patch literal 1874 zcmbVMU0V}J6n-asWPvT}qEJ8Cwzeb&vk3@T0}7&uB@t=>ZN<{bW=vK$yXo%4l>VxE zla^le2lPkv>6zWwQb~Hzn?3WM&v(wAGk^T~+wTD8!AEfs*-==?jUkUY4f9IgQlAB- zUevIp;kLqGDtt#nL4jorD+=G$aBmc=SkrJ{$#o46lzgaRL&--;Y$owIiLV%jmmSZM zcNqp!>3xR5b-yYY&J-O_JZUv5BG}~>mo!Gvx4FB|14rSma!}Ttkl}W*6BMm5 zzx*g;CNvXkp**>455*l<+$uJ&s|R#DV(8CR0n(osYyi6=U?QDV55s!Q3tV_A)( zgRCF-@F436nbxs`uXQ{{S;sE+7>1-HRhi9-+80IZm_X8c@Dm48e6DxJl&ZMmh)v*q$nIvB5I6#JB zym9oNvSO^`CB9>r>RzbbZlAPTIu4b&UGjf&T$fu5*_@dwaoh2vAJz-zW1{4mq%gP3 z=5sTjJ6t-POPgy=8n0)fvgJr?VSXt)pEpxmo4cjrtm!&$g!xF=Z~U~mUJv|+u;v!C zxorMcK9^lwFw6WEjdC|i$M>rI;{Tgs8nkH6qFLFlycV`(xY;{bciR2HI_7XemOk+#nY3n0ZaBiNGOYF>*JlxXaf?!h zHVrn_-V3OueL5d+d7?q>9|?tg;5WGAG30ub@7J5|Loi0+WyyoMoK9$u-oCXOEg3$+ z$Mn_{33~VkNYXn%->ZZyl8ofgjbFgt(IJ6r^c{|r8_P_#Fl* z9Z<@2kT}Kw{e{6}3?*=kVMf~74w4x|Q&wZ-7^4YvFqSd&*!?3G!*POVjI&W7*%gU_ zh{PqL0T`IX1Tj93SzJJYP!UrRF*7dSB}O!G9iJ1mNi5+D%+OU*6tC#Vnlxz`ZXna8 ozY<|!;#ZtAj1DG@^Br6;COeq=nF3FC;_``3O#I!6*~shWUx?`FDgXcg literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/OschinaPageProcesser.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/OschinaPageProcesser.class new file mode 100644 index 0000000000000000000000000000000000000000..a7daed0c624f44b5885a65ace6967a6848c0ad43 GIT binary patch literal 1847 zcmb7EZC4XV6n-|mB*0c>v9zMKTWd=~Fq81A1`rBGlptt8?E&f;HbXMH*-dvR#77liQInq2FFSMZ-22?;&faJK`umSR0nFl?VT>a^jA`6RATt7n ztp4P*XC{H!1m?6oukD2d78AIs?OVgRjeG)2dR!V9ACw;9><1(!6oTQ zwPK(znR;xXf88$$1Lq6U6A$Xu6A|q56PG+z!FRa(m;5#A=MUXcTueA&VpC)@C=#+fKt42EmSN!S}V-U0i=BcBy5%+$*zU1ejmZbjv~&r6Lwr zlc^p&^f`qN7yWwRh)t<)?ozk*Gn$@>k8vrEuT5;?u7Qmue)#Ru%JEbs5U0zB*CvmD z%>9(CC{?@7SfkN6%J{8|Jj!@NvG3|4RMPj@;Zfr_oodI&v1Q^O?wi;~!Nd+87#L7e zX(pE$E6JCKtB%XVaC!3KzIIO@vr3K;mtCE-hlkXu<9kYYiYUF4(Jo0jZy~L>;>q2K zUlNK-cke?A@aM)Xrs}Ek2t`*=sc#y(i*iTPij`yO^2H*~#s#{hh+J?aCLz zzAKy;e#&021b$VpnT1R?lbg$BGYj)}k)P6-x3f$<)#YdY|Af;JMl%@A(eBA};n0QN z=#JA?f*-IBk@$guiSF?_sx^^Ys_GJK&xs6$ON9xz7;Ut8X+TrmVY>tyhy|plJIVJ& z(MtqfP^jdP@>^meG>hoIr_WJdD(&-tRQ5=hO3an~))$EtMUL!nR`ew9nlK(zDY1`O<^r<)i|Tk+^1afYE7nix)7Bay>A!v~Q=7wn4) zj$?rK7Dh2fOfO=R7~iCwCSbRUvgO6!7)27F<2q6Pf}%9dmgh_I7=)0duco;i m*}&NEIA@)2;(|5Wgk_C2aq$;A?(BG?qvNrEJ5EJWQ~v<*1n3_C literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/classes/us/codecraft/webmagic/samples/QzoneBlogProcessor.class b/webmagic-samples/target/classes/us/codecraft/webmagic/samples/QzoneBlogProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..a25a4a7e5176d4205e14c019c0375ff1e3d1eee1 GIT binary patch literal 1764 zcmb7EZFdq!6n=)hK*&}NsnJ@k>q`rS$N({+74l{@#s*B3B=(#%dX{AZ6Bm~54$|7w z-_gI(exarx`UCo-db|Ue+6H<~KkUrhJ9qB$+}Y>OpMU-S2Y`7z5910}y3n8!Pr4W|&yb{D}5Nko)XBf}RhE&T8 zBeD2C!|1wO5e(-GvLT+d>Sf{WT4jekk%DVm&c5YIZTFp{swRDgOrhm-n-1EZb)vN`2sV2L!}ZvZ^E*~mZY`$kZR-?*G%9D+1ZdvoK3RRMd zXnYon4ELGc z@W=E|v6@oNdz`1UmDVv4sYt8wZPIq@yy^OiAH2AAIJ*+>2M4iX;1MqPQM%1`yPee7 z`qS_RO4wz%Jb+%8oq;{Q-!8guq~ln8A(=8`Maz~A<@&Xp`Is0uCOORQlKG99PQA>& z%*4&LCduWwC~rx{7v{6c`Lr3^+T1M`=1fPv66PaezjEW|dd+j|f@cMSDO-f-o@uEmt5Vsu zJZg+*r=2(5hyARsXd!5wIPL5VOSl&ZAeQEqNXzje0%6!_u4d2rwgC(g?ixD zE!iMF3_u-rBmGXEq~j%Jd1}w2e`b)i=L>JGO8tWy_?X^hdRXX@9-*1qnZ{4Z;xsdw z$7X*6`;`^}T%mEi>pX`~X>IfZa240cqBjNCY1D^*#weu&vWX4?k&zRO25^EghGJr_ zgYiTp*xd-7U?PAH!imVFcAUUq+SG6(UAP&H(fT5$h~W&eixR&@g3$10526oGVC1<$ z1g7u>ZsHaZzD-e@WY6C zMrmes%;}g{@`92-*YSlC9_d)rv7}>JNh>;5b*!o5`XDy2spGNQztpj%_H7+IYJU>N zS5fRnk<-w>WY=xEqM;{|e5Rpy(=7`Pw{mt}JZ;uW!aL$6hcvOAYjNip_iQDH%3fKu zeGS=M(`ObrS{^@_?2RbZc*VAu&ua}w_$+VN`G(_G4m{TqzAwB*4beth&@h?k;(ov@ zVlg1qpp%A)|H4tkija9*67XIk*#)ZXlzcGnHa$yh*{ZU!f6+_7;`!Vmh^&4AD^> z82B282J$#Ea182qpR}bSG09ljetoiLIo$V`(W@3+9c3rxDb>DaG?xhG^afot@2Q((`j>o}bg)hF%6rDn0w3BTI#< zsbCJTSJ-~(rLd%ihn<6jqwRW3jc_>iuBTzVGhU(E^SdK!4u$PHzrJuNF$K;C2lW(b zoRgiyb^vRLcyzz3iQIKDdFk2p%3`-C(;*6_9FT6?kD|qhZV;|1ZHMJ-UlL%1m&-@o zqc?ddzHbU&5^yw3dyP}CTf3k+Y&7MTEu6B3wGQ06yyi~SRK$pHQCRACt7VbGuK^*KeP{0GP%~5-FsU$RL}*L_cykYlcaa$tPeZ zaL&Y2CO)6Qv zTlKQ=S9#f`OseQP+NuS(w7 z;w!u=R(#J9N(q0KA>IrFhOtZs0JCK_kkzCW!|1>22vKQYHmam(U-3DA$?cYwu3eN$ z6W#Fd4Qw@kG%@~1Z6S06%3Rt&Y}5p=q}Od*HF;xg(Q&y_b7{2^ zl$(6n!fgX}2Y1N@Wv{Yj;T{&^xNo6|afYFq*3B6zEUUZ@E;R2nYzq&tY~dl6iSxf* zKo=F?(8;tbE$anA+dwL7`BnjrTR@`2NpA-q3a6h zhS5Xo6sg=#zz2{feV1ru=#PgKZF(ZZQ5+)ygE)gR`WmC|LXlzSBxM**VZ1H!N)Q7B epRgx2u#LTD*!Q0H>~3{rSE~a*TRk0Ao%s&yUYW=M literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/test-classes/us/codecraft/webmagic/HtmlTest.class b/webmagic-samples/target/test-classes/us/codecraft/webmagic/HtmlTest.class new file mode 100644 index 0000000000000000000000000000000000000000..7e93aefe6a87503eed3ba03c7c8de7c3d2139ef7 GIT binary patch literal 1028 zcmb7D+iuf95IyT$Y+ScZO3i&PMi-6)DPo{2aj9t}562F`Fy4LOs#dM_R)e(*@h z9%hdTb%y*MH!zO|L$jRwZ*>_oUJOrWU6sD)x z;JQKgb5q4F1GjO9VXeI2F*j;MvU5Tn4V?r>_5>+m+9^9rfHCnE(Xtyy|-f? z(gWB!$*a(=dje?^vHRG-Ed4KXD4^Gl2F(lPIkYlbYwbg@kNLJqb3G3lI8C-u9Ka%$ z$YWThWF=32fht)*>noJ!X5|o7*Q{-u^-oYu%{+Aky@DgmFnoqF#hycjavIPHqe&HH djpYJoQbWfo&fqN7TA@A3WtCQjb2KYB{}a`s0!9D; literal 0 HcmV?d00001 diff --git a/webmagic-samples/target/test-classes/us/codecraft/webmagic/SpiderTest.class b/webmagic-samples/target/test-classes/us/codecraft/webmagic/SpiderTest.class new file mode 100644 index 0000000000000000000000000000000000000000..f41ca615e73245121a91bdd058f178697618f80f GIT binary patch literal 2382 zcmah~U02&i5WQ;%GC~FF03|dKnx>9{U_nS43L$Ai2~gZX;*^wrr9xV4ajcIct>W<7 z=l+@Y!Q_N<`UCo-dO9ol1BwlP(C*I8+_`gicKy%4AN~fgfI}6Z;;u@wdkXHW=t>q} zDtMrxCs{1Y?XMIprLmmGLlr7kp}%6drHJ;5W|=!iEK`%lX36yeF6$_IQDE|C zwiI%prAq$Lcx!05j&TJ$8gAhQ!%TZAecR_1Iul)j?9>+;UZTiwr+r9hNaCTs5xujc zX3ZL2;d>3c7-v{$A9!Ky3~$Op_)EH8tyc4vZFomfmAj?9={b7Yb9mk_`;Q&ZS_yr_ z?Zdlp3Hm|NYJS&cT-mo16o|A--2Awk`2(#0(^Rx5$vT!O= zzSkOlz#g^m`qM21KWg|1KP&h}!>@Rw;Wrox_BEKW7#_4QIi%yWqKXm3`mP$Zd=c>| zKGxXIFs56EFm%Bkzt!QU^wcE>uHgVB>IiwJdE3hi$G7Z2Lm4*1Wc#$OR-gu!fx7G` zeS80qo77zsEz_neco0Os;8yceFkHU~ma^uiI<$9^m|8R4Xe@@!TnFcdi{9wFlE41_}iokYD%jYffQBz7>6m21&oX(2SKIt*mLD4w6 zFXUp)rH77EG0e5e-;sKPe(H>iM0qQ*9i;4S-V}zdPVr42T|SHP{kgnlWU2H@`8*Iu z4B2*^&liu+Fh>8G@^=MvA23ee30mniGHIPY2K$pHDcqoMPi!2(B+a$NfgobcU`H`b3`Sz`kp!R)K1%Fv z;R{NVCC_deZzD%DNoR^ihG|Nkij)6AzB2j73DmtzUq(B|M>1i5W}t?_*MH$-xu_vi z!`1)s8`_KghL15)!zVOPpW!(|$W#;+K0z#RP{ET}Ctj0eP55rq`D%EG8QdXWXIaiR zSuPPrMsXVP$&9|oHDc3JM2#!Rp^vJQ=!w)?9sMk3zKJ