From 4b631bcd1e636476b89a51e041f0b5e896fffe0a Mon Sep 17 00:00:00 2001 From: Saisai Date: Fri, 16 Aug 2024 14:59:14 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E7=88=AC=E5=8F=96=E6=96=B0=E9=97=BB?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=9B=BE=E7=89=87=E6=96=87=E4=BB=B6=20eg?= =?UTF-8?q?=EF=BC=9Ahttp://www.nanshan.edu.cn/info/1051/8981.htm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 8 ++ .../4dc4cc62295b4354d089e3899b0111a1.json | 2 +- .../a309af708c1947137a611e9580ec9248.json | 1 - pom.xml | 6 ++ .../webMagic/OschinaBlogPageProcessor.java | 102 +++++++++++------- .../mobai/webMagic/util/ImageProcessor.java | 39 +++++++ 6 files changed, 116 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/mobai/webMagic/util/ImageProcessor.java diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index c32584c..ee2c34b 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,5 +2,13 @@ \ No newline at end of file diff --git a/news/www.nanshan.edu.cn/4dc4cc62295b4354d089e3899b0111a1.json b/news/www.nanshan.edu.cn/4dc4cc62295b4354d089e3899b0111a1.json index 4203f6e..9b9e800 100644 --- a/news/www.nanshan.edu.cn/4dc4cc62295b4354d089e3899b0111a1.json +++ b/news/www.nanshan.edu.cn/4dc4cc62295b4354d089e3899b0111a1.json @@ -1 +1 @@ -{"url":"http://www.nanshan.edu.cn/info/1051/8981.htm","title":"烟台南山学院纺织与服装学院党总支荣获“烟台市先进基层党组织”","date":"2024-07-05","source":"纺织与服装学院","content":"中国共产党成立103周年前夕,为表彰先进、树立标杆、凝聚力量,中共烟台市委公布烟台市优秀共产党员、优秀党务工作者、先进基层党组织表彰对象名单。烟台南山学院纺织与服装学院党总支被表彰为“烟台市先进基层党组织”。 近年来,烟台南山学院纺织与服装学院党总支坚持落实立德树人根本任务,紧紧围绕“党建引领、立德树人、校企一体、协同育人”办学理念布局工作,积极打造“匠心智尚·中国结”党建品牌,推动学院各项工作高质量发展。 在党总支引领下,纺织与服装学院教育教学成果丰硕,教科研工作质量显著提升。党总支与龙口市下丁家镇机关党支部联建,开展“联建共建强党建,凝心聚力促发展”等主题活动;深化校企融合,与山东南山智尚科技股份有限公司党支部联建共建,实现组织联建、科研联攻、人才联动、效益联创;深化产业合作,成立“黄河流域纺织服装校企科技创新联盟”,成立“智尚”纺织服装产业学院。学院共发表学术论文100余篇,授权专利50余项,获批山东省基层教学组织1项,山东省高等教育示范性实习(实训)基地1项,山东省一流本科专业建设点1项,省级教研项目14项,“纺织之光”教学成果奖15项,山东省工程研究中心1项,省级科研平台4个,山东省高等学校课程思政教学改革研究项目1项,山东省本科教学改革研究重点项目1项,荣获省部级科技奖励10余项。 纺织与服装学院党总支将继续深入学习贯彻党的二十大精神,牢记为党育人、为国育才使命,深化“党建+教育”工作,依托校企地共建联建,加快学院高质量发展,奋力书写高水平应用型大学育人新篇章。"} \ No newline at end of file +{"url":"http://www.nanshan.edu.cn/info/1051/8981.htm","title":"烟台南山学院纺织与服装学院党总支荣获“烟台市先进基层党组织”","date":"2024-07-05","source":"纺织与服装学院 ","content":"中国共产党成立103周年前夕,为表彰先进、树立标杆、凝聚力量,中共烟台市委公布烟台市优秀共产党员、优秀党务工作者、先进基层党组织表彰对象名单。烟台南山学院纺织与服装学院党总支被表彰为“烟台市先进基层党组织”。 近年来,烟台南山学院纺织与服装学院党总支坚持落实立德树人根本任务,紧紧围绕“党建引领、立德树人、校企一体、协同育人”办学理念布局工作,积极打造“匠心智尚·中国结”党建品牌,推动学院各项工作高质量发展。 在党总支引领下,纺织与服装学院教育教学成果丰硕,教科研工作质量显著提升。党总支与龙口市下丁家镇机关党支部联建,开展“联建共建强党建,凝心聚力促发展”等主题活动;深化校企融合,与山东南山智尚科技股份有限公司党支部联建共建,实现组织联建、科研联攻、人才联动、效益联创;深化产业合作,成立“黄河流域纺织服装校企科技创新联盟”,成立“智尚”纺织服装产业学院。学院共发表学术论文100余篇,授权专利50余项,获批山东省基层教学组织1项,山东省高等教育示范性实习(实训)基地1项,山东省一流本科专业建设点1项,省级教研项目14项,“纺织之光”教学成果奖15项,山东省工程研究中心1项,省级科研平台4个,山东省高等学校课程思政教学改革研究项目1项,山东省本科教学改革研究重点项目1项,荣获省部级科技奖励10余项。 纺织与服装学院党总支将继续深入学习贯彻党的二十大精神,牢记为党育人、为国育才使命,深化“党建+教育”工作,依托校企地共建联建,加快学院高质量发展,奋力书写高水平应用型大学育人新篇章。"} \ No newline at end of file diff --git a/news/www.nanshan.edu.cn/a309af708c1947137a611e9580ec9248.json b/news/www.nanshan.edu.cn/a309af708c1947137a611e9580ec9248.json index 9e26dfe..e69de29 100644 --- a/news/www.nanshan.edu.cn/a309af708c1947137a611e9580ec9248.json +++ b/news/www.nanshan.edu.cn/a309af708c1947137a611e9580ec9248.json @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1ec7ce9..e77be9f 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,12 @@ 1.2.17 + + org.apache.commons + commons-lang3 + 3.14.0 + + org.projectlombok lombok diff --git a/src/main/java/com/mobai/webMagic/OschinaBlogPageProcessor.java b/src/main/java/com/mobai/webMagic/OschinaBlogPageProcessor.java index 3c6a2d0..110b5a9 100644 --- a/src/main/java/com/mobai/webMagic/OschinaBlogPageProcessor.java +++ b/src/main/java/com/mobai/webMagic/OschinaBlogPageProcessor.java @@ -1,11 +1,14 @@ package com.mobai.webMagic; +import com.mobai.webMagic.util.ImageDownloaderUtil; +import org.apache.commons.lang3.ObjectUtils; import org.apache.log4j.Logger; import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.pipeline.JsonFilePipeline; import us.codecraft.webmagic.processor.PageProcessor; +import us.codecraft.webmagic.selector.Html; import us.codecraft.webmagic.selector.Selectable; import java.util.List; @@ -29,44 +32,56 @@ public class OschinaBlogPageProcessor implements PageProcessor { } log.info(url1.get()); if (url1.get().matches("http://www.nanshan.edu.cn/nyyw.*")) { - // 获取烟台南山学院的新闻Url - List newsUrls = page.getHtml() - .xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/ul/li/a").links().all(); - // 存在分页,将下一页url 添加到待采集列表 - Selectable nextPage = null; - Selectable firstA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[5]/div/div[2]/div/table/tbody/tr/table/tr/td[3]/div/a[1]/text()"); - Selectable secondA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[5]/div/div[2]/div/table/tbody/tr/table/tr/td[3]/div/a[3]/test()"); - - if ("下页".equals(firstA.links().get())) { - nextPage = firstA; - } else if ("下页".equals(secondA.links().get())) { - nextPage = secondA; - } else { - System.out.println("没有下一页"); - } - if (nextPage != null) { - newsUrls.add(nextPage.links().get()); - Selectable finalNextPage = nextPage; - process(new Page() {{ - setUrl(finalNextPage); - }}); - } +// // 获取烟台南山学院的新闻Url +// List newsUrls = page.getHtml() +// .xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/ul/li/a").links().all(); +// // 存在分页,将下一页url 添加到待采集列表 +// Selectable nextPage = null; +// Selectable firstA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/a[1]/text()"); +// Selectable secondA = null; +// if ("首页".equals(firstA)){ +// secondA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/a[3]/text()"); +// } +// if ("下页".equals(firstA)) { +// nextPage = firstA; +// } else if ("下页".equals(secondA)) { +// nextPage = secondA; +// } else { +// System.out.println("没有下一页"); +// } +// if (nextPage != null) { +// newsUrls.add(nextPage.links().get()); +// Selectable finalNextPage = nextPage; +// process(new Page() {{ +// setUrl(finalNextPage); +// }}); +// } // 添加 - page.addTargetRequests(newsUrls); + page.addTargetRequests(getNewsUrls(page)); + page.setSkip(true); } else { String url = page.getUrl().toString(); String title = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/form/div/h1/text()").get(); // 日期等信息需分割 包括 来源 String newsHead = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/form/div/div[1]/text()").get(); - String[] split = newsHead.split(":"); - String date = newsHead.substring(newsHead.indexOf(split[2]), newsHead.indexOf(split[2]) + 10); - String source = newsHead.substring(newsHead.indexOf(split[5]), newsHead.indexOf(split[5]) + 7); + String date = newsHead.substring(newsHead.indexOf("发布时间")+5, newsHead.indexOf("发布时间") + 15); + String source = newsHead.substring(newsHead.indexOf("来源")+3, newsHead.indexOf("点击次数")-2); String content = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/form/div/div[2]/allText()").get(); page.putField("url", url); page.putField("title", title); page.putField("date", date); page.putField("source", source); page.putField("content", content); + + + //获取图片对应的URL + List urlList = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/form/div/div[2]/div/p/img/@src").all(); + // 下载每一张图片 + for (int i = 0; i < urlList.size(); i++) { + // http://www.nanshan.edu.cn/__local/2/4D/93/76F03CB6EBE3BFB7018397B37D4_C03E3A0C_36A9C.png + String inputUrl = "http://www.nanshan.edu.cn" + urlList.get(i); + ImageDownloaderUtil.downLoadImage(inputUrl, "D:/workspace/web-magic-test/news/img/" + inputUrl.split("/")[7]); + } } List links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all(); page.addTargetRequests(links); @@ -79,22 +94,30 @@ public class OschinaBlogPageProcessor implements PageProcessor { .xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/ul/li/a").links().all(); // 存在分页,将下一页url 添加到待采集列表 Selectable nextPage = null; - Selectable firstA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[5]/div/div[2]/div/table/tbody/tr/table/tr/td[3]/div/a[1]/text()"); - Selectable secondA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[5]/div/div[2]/div/table/tbody/tr/table/tr/td[3]/div/a[3]/test()"); - - if ("下页".equals(firstA.links().get())) { - nextPage = firstA; - } else if ("下页".equals(secondA.links().get())) { - nextPage = secondA; +// Selectable firstA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/a[1]/text()"); + Selectable firstA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/a[1]"); + Selectable secondA = null; + if (firstA.get().contains("首页")) { + try { + secondA = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/div[2]/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/a[3]"); + } catch (Exception e) { + log.error("没有下一页了"); + } + } + if (firstA.get().contains("下页")) { + nextPage = firstA.links(); + } else if (ObjectUtils.isNotEmpty(secondA) && secondA.get().contains("下页")) { + nextPage = secondA.links(); } else { System.out.println("没有下一页"); } if (nextPage != null) { - newsUrls.add(nextPage.links().get()); - Selectable finalNextPage = nextPage; - process(new Page() {{ - setUrl(finalNextPage); - }}); +// Selectable finalNextPage = nextPage; +// newsUrls.addAll(getNewsUrls(new Page() {{ +// setUrl(finalNextPage); +// setHtml(new Html("",finalNextPage.get())); +// }})); + newsUrls.add(nextPage.get()); } return newsUrls; } @@ -102,12 +125,11 @@ public class OschinaBlogPageProcessor implements PageProcessor { @Override public Site getSite() { return site; - } public static void main(String[] args) { Spider.create(new OschinaBlogPageProcessor()) - .addUrl("http://www.nanshan.edu.cn/nyyw.htm") + .addUrl("http://www.nanshan.edu.cn/info/1051/8981.htm") .addPipeline(new JsonFilePipeline("news/")) .run(); } diff --git a/src/main/java/com/mobai/webMagic/util/ImageProcessor.java b/src/main/java/com/mobai/webMagic/util/ImageProcessor.java new file mode 100644 index 0000000..14c1fbf --- /dev/null +++ b/src/main/java/com/mobai/webMagic/util/ImageProcessor.java @@ -0,0 +1,39 @@ +package com.mobai.webMagic.util; + +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.Spider; +import us.codecraft.webmagic.processor.PageProcessor; + +import java.util.List; + +public class ImageProcessor implements PageProcessor { + + private Site site = Site.me().setTimeOut(10000); + + public void process(Page page) { + //获取图片对应的URL + List urlList = page.getHtml().$("div[id=content]").xpath("//div/a/img/@src").all(); + // 下载每一张图片 + for (int i = 0; i < urlList.size(); i++) { + // http://www.nanshan.edu.cn/__local/2/4D/93/76F03CB6EBE3BFB7018397B37D4_C03E3A0C_36A9C.png + String inputUrl = "http://www.nanshan.edu.cn" + urlList.get(i); + ImageDownloaderUtil.downLoadImage(inputUrl, "image/" + inputUrl.split("/")[5]); + } + //获取下一页的url + String next = page.getHtml().xpath("//*[@id=\"content\"]/ul[2]/li[@class='nextPage']").links().get(); + page.addTargetRequest(next); + } + + public Site getSite() { + return site; + } + + + public static void main(String[] args) { + Spider.create(new ImageProcessor()) + .addUrl("https://www.socwall.com") + .thread(5) + .run(); + } +}