简单的Java代码爬虫
最近接触了一下使用java代码爬虫的技术,做一下笔记!!!
说到为什么用java爬虫的原因其实最主要是不会Python,哈哈哈哈哈。
首先讲讲需求,主要的任务是,对固定的几个网页进行文章的爬取。
用java去爬虫最主要是用到了HttpUtils这个工具类,通过HttpUtils获得url的网络请求,通过XPath标签获得相对应的内容的标签
HtmlPage xinwen = HttpUtils.getInstance().getHtmlPageResponse("这里填url");
HtmlElement xinwenul =
(HtmlElement)xinwen.getByXPath("这里填XPath").get(0);
//通过XPath获得ul标签,再通过ul标签获得里面的子元素
Iterable<DomElement> childElements= xinwenul.getChildElements();
获得了子元素之后就可以进行迭代遍历了,通过遍历获取标签里面的超链接
while (childElements.iterator().hasNext()){
DomElement next = childElements.iterator().next();
String href = next.getLastElementChild().getFirstElementChild().getAttribute("href");
urlList.add(href);
获取标签里面的内容主要看所在的层级,这个就要在一开始就要用浏览器对页面进行数据定位,获得层级的超链接后,就可以按照同上的逻辑进行数据采集和清洗了。
for(String url:urlList){
dataCaptureEntity=new OdsLxjzCrossStudy();
HtmlPage htmlPage = HttpUtils.getInstance().getHtmlPageResponse(url);
try {
String title = ((HtmlElement) htmlPage.getByXPath("/html/body/div[4]/div[1]/div[2]/h1").get(0)).asText();
title=HttpUtils.getInstance().stringTrimAll(title);
dataCaptureEntity.setTitle(title);
String time=((HtmlElement)htmlPage.getByXPath("/html/body/div[4]/div[1]/div[2]/div[1]").get(0)).asText();
time=time.substring(0,time.indexOf(":")+3);
SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
dataCaptureEntity.setCreateTime(dtf.parse(time));
String source = ((HtmlElement) htmlPage.getByXPath("/html/body/div[4]/div[1]/div[2]/div[1]/span").get(0)).asText();
source=source.substring(source.lastIndexOf(": ")+1);
dataCaptureEntity.setSource(source);
HtmlElement htmlElement = (HtmlElement) htmlPage.getByXPath("//*[@id=\"UCAP-CONTENT\"]").get(0);
DomNodeList<HtmlElement> pList = htmlElement.getElementsByTagName("P");
String article="";
for(HtmlElement element:pList){
String str=element.asText();
if(str.length()>10){
article+=element.asText();
}
}
dataCaptureEntity.setArticleContent(article);
dataList.add(dataCaptureEntity);
}catch (Exception e){
continue;
}
}
经过清洗后,把数据存入对象就可以进行数据库的存入或者是页面的展示了