java尝试爬取一些简单的数据,比python复杂点

  示例:爬取网站中的所有古风网名:http://www.oicq88.com/gufeng/,并储存入数据库(mysql)

    jdk版本:jdk1.8

    编辑器:idea

    项目构建:maven

    所需jar包:http://jsoup.org/packages/jsoup-1.8.1.jar

    或maven依赖如下:

        <dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>

  

具体代码如下:

package com.ssm.web.timed;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import com.ssm.commons.JsonResp;
import com.ssm.utils.ExportExcel;
import org.apache.log4j.Logger;
import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; @RequestMapping
@RestController
public class TestCrawlerTime {
private Logger log = Logger.getLogger(this.getClass()); //根据url从网络获取网页文本
public static Document getHtmlTextByUrl(String url, String page) {
Document doc = null;
try {
//doc = Jsoup.connect(url).timeout(5000000).get();
int i = (int) (Math.random() * 1000); //做一个随机延时,防止网站屏蔽
while (i != 0) {
i--;
}
doc = Jsoup.connect(url + page).data("query", "Java")
.userAgent("Mozilla").cookie("auth", "token")
.timeout(300000).get();
} catch (IOException e) {
/*try {
doc = Jsoup.connect(url).timeout(5000000).get();
} catch (IOException e1) {
e1.printStackTrace();
}*/
System.out.println("error: 第一次获取出错");
}
return doc;
} //递归查找所有的名字
public static List getAllNames(List<String> names, String url, String page){
Document doc = getHtmlTextByUrl(url, page);
Elements nameTags = doc.select("div[class=listfix] li p"); //名字标签
for (Element name : nameTags){
names.add(name.text());
}
Elements aTags = doc.select("div[class=page] a[class=next]"); //页数跳转标签
for (Element aTag : aTags){
if ("下一页".equals(aTag.text())){ //是下一页则继续爬取
String newUrl = aTag.attr("href");
getAllNames(names, url, newUrl);
}
}
return names;
} /**
* @Description: 导出爬取到的所有网名
* @Param:
* @return:
* @Author: mufeng
* @Date: 2018/12/11
*/
@RequestMapping(value = "/exportNames")
public JsonResp export(HttpServletResponse response){
log.info("导出爬取到的所有网名");
String target = "http://www.oicq88.com/";
String page = "/gufeng/1.htm";
List names = new ArrayList();
getAllNames(names, target, page);
System.out.println(names.size());
List<Object[]> lists = new ArrayList<>();
Integer i = 1;
for (Object name : names){
lists.add(new Object[]{i, name});
i ++;
}
String[] rowName = new String[]{ "", "网名"};
ExportExcel exportExcel = new ExportExcel("古风网名大全", rowName, lists);
try {
exportExcel.export(response);
} catch (Exception e) {
e.printStackTrace();
}
return JsonResp.ok();
} public static void main(String[] args) {
String target = "http://www.oicq88.com/";
String page = "/gufeng/1.htm";
List names = new ArrayList();
getAllNames(names, target, page);
System.out.println(names.size());
System.out.println(names.get(0));
System.out.println(names.get(names.size()-1));
} }

  运行结果如下:

    

    

  参考教程:https://www.cnblogs.com/Jims2016/p/5877300.html

       https://www.cnblogs.com/qdhxhz/p/9338834.html

       https://www.cnblogs.com/sanmubird/p/7857474.html

附:python爬取数据

最新文章

  1. C# await和async
  2. show master/slave status求根溯源
  3. DataBinding examples
  4. EasyUI、Struts2、Hibernate、spring 框架整合
  5. WP8.1下 Cortana语音命令 VCD文件 设计
  6. Xcode如何找到默认的生成路径?
  7. Chapter7: question 49 - 50
  8. Android activity界面跳转动画
  9. web工程导入MyEclipse 就变成Java工程 ———— 解决方案
  10. 解密ThreadLocal
  11. uva580Critical Mass
  12. MVC&amp;WebForm对照学习:ajax异步请求
  13. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(5)
  14. 膜拜 2014-2 (献给L之三)
  15. redhat ping不通外网的解决办法
  16. IOS 高级开发 KVC(一)
  17. 发布网站,报Access to the path is denied的解决办法
  18. bzoj1131: [POI2008]Sta
  19. WINDOWS下简单操作SQLITE3
  20. SQL Server 2005为数据库设置用户名和密码的方法

热门文章

  1. 2019.01.21 NOIP训练 可持久化序列【模板】(可持久化treap)
  2. 2019.01.20 bzoj5158 Alice&Bob(拓扑排序+贪心)
  3. 2018.11.14 uoj#34. 多项式乘法(fft)
  4. 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)
  5. 第1章 Python数据模型
  6. c#文件比较Code
  7. CodeForces 916B Jamie and Binary Sequence (changed after round) (贪心)
  8. BZOJ 2120 数颜色 (带修莫队)
  9. Linux四剑客find/grep/awk/sed
  10. RestTemplate将响应数据转换为具有泛型的类对象