最近在项目中遇到了java和python爬虫进行程序调用和接口对接的问题, 刚开始也是调试了好久才得出点门道.

而后,自己也发现了爬虫的好玩之处,边想着用java来写个爬虫玩玩,虽说是个不起眼的demo,但还是想记录一下这个小爬虫,便于以后的查阅.

直接上代码:

 import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.util.StringUtils; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class MySpider {
public static void main(String[] args) {
List<NewsEntity> list = new ArrayList<NewsEntity>();
Connection connect = Jsoup.connect("http://top.baidu.com/buzz?b=1&fr=tph_right"); //百度风云榜网址
connect.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"); //模拟火狐浏览器访问网页
try {
Document document = connect.get(); //建立连接,获取网页内容为文档对象
Element main = document.getElementById("main"); //获取需要爬去部位的根元素
Elements url = main.select("div[class=mainBody]").select("table[class=list-table]")
.select("tbody").select("tr"); //css选择器
int i = 0;
for (Element element : url) {
NewsEntity entity = new NewsEntity();
String attr_url = element.select("td[class=keyword]").select("a[class=list-title]").attr("href");
String text = element.select("td[class=keyword]").select("a[class=list-title]").text();
String span = element.select("td[class=last").select("span").text();
if (StringUtils.isEmpty(attr_url) || StringUtils.isEmpty(text) || StringUtils.isEmpty(span)) {
continue;
}
entity.setTitle(text);
entity.setUrl(attr_url);
entity.setHots(span);
i++;
if (i > 10) {
break;
}
list.add(entity); }
System.out.println(list.toString());
System.out.println(list.size()); } catch (IOException e) {
e.printStackTrace();
System.out.println("网页元素发生改变或访问被禁止");
}
}
}

简易封装:

 /**
* @author RYH
* @description 封装新闻实体
* @date 2019/2/26
**/
public class NewsEntity {
private String title;
private String url;
private String hots; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getHots() {
return hots;
} public void setHots(String hots) {
this.hots = hots;
} @Override
public String toString() {
return "NewsEntity{" +
"title='" + title + '\'' +
", url='" + url + '\'' +
", hots=" + hots +
'}';
}
}

导入的包也只有jsoup包,功能还是很强大的


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

控制台打印也一目了然, 做些简单的爬取还是很容易的

最新文章

  1. c#知识点总结
  2. 跳转到某个Activity
  3. hdu 4832 dp ***
  4. SQL基础,与数据类型;
  5. 最简单的用jquery实现动画的跳到顶部和底部
  6. 解决魅族USB调试无法被电脑识别的问题(含Mac OS X、Win7)
  7. 如何解决DE0-Nano的EPCS16 无法下载的问题:NO EPCS LAYOUT DATA --- LOOKING FOR SECTION [EPCS-XXXXXX]
  8. C_const
  9. gcc/g++ 如何支持c11 / c++11标准编译
  10. 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
  11. 管理维护Replica Sets
  12. Js中常用知识点(typeof、instanceof、动态属性、变量作用域)
  13. 关闭VS2017脚本调试 已启用 Visual Studio 中的 Chrome 脚本调试
  14. H: Dave的组合数组(二分法)
  15. JDK动态代理源码解析
  16. Operation(Swift)
  17. 每天CSS学习之direction
  18. JavaScript中变量的相互引用
  19. 显示所有环境变量:env 或者 printenv
  20. Java堆栈解析

热门文章

  1. 特殊计数序列——第二类斯特林(stirling)数
  2. java返回json设置自定义的格式
  3. YUI Compressor
  4. calico客户端工具calicoctl
  5. TODO springboot学习笔记
  6. mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user &#39;mhz&#39;@&#39;localhost&#39; (using password: YES)
  7. DirectX11--深入理解与使用缓冲区资源
  8. 阿里云OSS的Bucket容量大小采集
  9. 我的长大app开发教程第一弹:Fragment布局
  10. element ui change 传递带自定义参数