parent
39db1a4db8
commit
4b631bcd1e
|
@ -2,5 +2,13 @@
|
||||||
<profile version="1.0">
|
<profile version="1.0">
|
||||||
<option name="myName" value="Project Default" />
|
<option name="myName" value="Project Default" />
|
||||||
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
|
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliDeprecation" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliEqualsAvoidNull" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliMissingOverrideAnnotation" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AliWrapperTypeEquality" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
|
@ -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余项。 纺织与服装学院党总支将继续深入学习贯彻党的二十大精神,牢记为党育人、为国育才使命,深化“党建+教育”工作,依托校企地共建联建,加快学院高质量发展,奋力书写高水平应用型大学育人新篇章。"}
|
{"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余项。 纺织与服装学院党总支将继续深入学习贯彻党的二十大精神,牢记为党育人、为国育才使命,深化“党建+教育”工作,依托校企地共建联建,加快学院高质量发展,奋力书写高水平应用型大学育人新篇章。"}
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
6
pom.xml
6
pom.xml
|
@ -39,6 +39,12 @@
|
||||||
<version>1.2.17</version>
|
<version>1.2.17</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>3.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
package com.mobai.webMagic;
|
package com.mobai.webMagic;
|
||||||
|
|
||||||
|
import com.mobai.webMagic.util.ImageDownloaderUtil;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import us.codecraft.webmagic.Page;
|
import us.codecraft.webmagic.Page;
|
||||||
import us.codecraft.webmagic.Site;
|
import us.codecraft.webmagic.Site;
|
||||||
import us.codecraft.webmagic.Spider;
|
import us.codecraft.webmagic.Spider;
|
||||||
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
|
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
|
||||||
import us.codecraft.webmagic.processor.PageProcessor;
|
import us.codecraft.webmagic.processor.PageProcessor;
|
||||||
|
import us.codecraft.webmagic.selector.Html;
|
||||||
import us.codecraft.webmagic.selector.Selectable;
|
import us.codecraft.webmagic.selector.Selectable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -29,44 +32,56 @@ public class OschinaBlogPageProcessor implements PageProcessor {
|
||||||
}
|
}
|
||||||
log.info(url1.get());
|
log.info(url1.get());
|
||||||
if (url1.get().matches("http://www.nanshan.edu.cn/nyyw.*")) {
|
if (url1.get().matches("http://www.nanshan.edu.cn/nyyw.*")) {
|
||||||
// 获取烟台南山学院的新闻Url
|
// // 获取烟台南山学院的新闻Url
|
||||||
List<String> newsUrls = page.getHtml()
|
// List<String> newsUrls = page.getHtml()
|
||||||
.xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/ul/li/a").links().all();
|
// .xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/ul/li/a").links().all();
|
||||||
// 存在分页,将下一页url 添加到待采集列表
|
// // 存在分页,将下一页url 添加到待采集列表
|
||||||
Selectable nextPage = null;
|
// 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 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 = 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()");
|
// Selectable secondA = null;
|
||||||
|
// if ("首页".equals(firstA)){
|
||||||
if ("下页".equals(firstA.links().get())) {
|
// 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()");
|
||||||
nextPage = firstA;
|
// }
|
||||||
} else if ("下页".equals(secondA.links().get())) {
|
// if ("下页".equals(firstA)) {
|
||||||
nextPage = secondA;
|
// nextPage = firstA;
|
||||||
} else {
|
// } else if ("下页".equals(secondA)) {
|
||||||
System.out.println("没有下一页");
|
// nextPage = secondA;
|
||||||
}
|
// } else {
|
||||||
if (nextPage != null) {
|
// System.out.println("没有下一页");
|
||||||
newsUrls.add(nextPage.links().get());
|
// }
|
||||||
Selectable finalNextPage = nextPage;
|
// if (nextPage != null) {
|
||||||
process(new Page() {{
|
// newsUrls.add(nextPage.links().get());
|
||||||
setUrl(finalNextPage);
|
// Selectable finalNextPage = nextPage;
|
||||||
}});
|
// process(new Page() {{
|
||||||
}
|
// setUrl(finalNextPage);
|
||||||
|
// }});
|
||||||
|
// }
|
||||||
// 添加
|
// 添加
|
||||||
page.addTargetRequests(newsUrls);
|
page.addTargetRequests(getNewsUrls(page));
|
||||||
|
page.setSkip(true);
|
||||||
} else {
|
} else {
|
||||||
String url = page.getUrl().toString();
|
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 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 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("发布时间")+5, newsHead.indexOf("发布时间") + 15);
|
||||||
String date = newsHead.substring(newsHead.indexOf(split[2]), newsHead.indexOf(split[2]) + 10);
|
String source = newsHead.substring(newsHead.indexOf("来源")+3, newsHead.indexOf("点击次数")-2);
|
||||||
String source = newsHead.substring(newsHead.indexOf(split[5]), newsHead.indexOf(split[5]) + 7);
|
|
||||||
String content = page.getHtml().xpath("/html/body/div[5]/div[1]/div[1]/div[2]/form/div/div[2]/allText()").get();
|
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("url", url);
|
||||||
page.putField("title", title);
|
page.putField("title", title);
|
||||||
page.putField("date", date);
|
page.putField("date", date);
|
||||||
page.putField("source", source);
|
page.putField("source", source);
|
||||||
page.putField("content", content);
|
page.putField("content", content);
|
||||||
|
|
||||||
|
|
||||||
|
//获取图片对应的URL
|
||||||
|
List<String> 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<String> links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all();
|
List<String> links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all();
|
||||||
page.addTargetRequests(links);
|
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();
|
.xpath("/html/body/div[5]/div[1]/div[1]/div[2]/div/ul/li/a").links().all();
|
||||||
// 存在分页,将下一页url 添加到待采集列表
|
// 存在分页,将下一页url 添加到待采集列表
|
||||||
Selectable nextPage = null;
|
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 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 = 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()");
|
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 ("下页".equals(firstA.links().get())) {
|
if (firstA.get().contains("首页")) {
|
||||||
nextPage = firstA;
|
try {
|
||||||
} else if ("下页".equals(secondA.links().get())) {
|
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]");
|
||||||
nextPage = secondA;
|
} catch (Exception e) {
|
||||||
|
log.error("没有下一页了");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (firstA.get().contains("下页")) {
|
||||||
|
nextPage = firstA.links();
|
||||||
|
} else if (ObjectUtils.isNotEmpty(secondA) && secondA.get().contains("下页")) {
|
||||||
|
nextPage = secondA.links();
|
||||||
} else {
|
} else {
|
||||||
System.out.println("没有下一页");
|
System.out.println("没有下一页");
|
||||||
}
|
}
|
||||||
if (nextPage != null) {
|
if (nextPage != null) {
|
||||||
newsUrls.add(nextPage.links().get());
|
// Selectable finalNextPage = nextPage;
|
||||||
Selectable finalNextPage = nextPage;
|
// newsUrls.addAll(getNewsUrls(new Page() {{
|
||||||
process(new Page() {{
|
// setUrl(finalNextPage);
|
||||||
setUrl(finalNextPage);
|
// setHtml(new Html("",finalNextPage.get()));
|
||||||
}});
|
// }}));
|
||||||
|
newsUrls.add(nextPage.get());
|
||||||
}
|
}
|
||||||
return newsUrls;
|
return newsUrls;
|
||||||
}
|
}
|
||||||
|
@ -102,12 +125,11 @@ public class OschinaBlogPageProcessor implements PageProcessor {
|
||||||
@Override
|
@Override
|
||||||
public Site getSite() {
|
public Site getSite() {
|
||||||
return site;
|
return site;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
Spider.create(new OschinaBlogPageProcessor())
|
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/"))
|
.addPipeline(new JsonFilePipeline("news/"))
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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<String> 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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue