java爬虫实现爬取百度风云榜Top10
2024-10-11 02:08:01
最近在项目中遇到了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>
控制台打印也一目了然, 做些简单的爬取还是很容易的
最新文章
- c#知识点总结
- 跳转到某个Activity
- hdu 4832 dp ***
- SQL基础,与数据类型;
- 最简单的用jquery实现动画的跳到顶部和底部
- 解决魅族USB调试无法被电脑识别的问题(含Mac OS X、Win7)
- 如何解决DE0-Nano的EPCS16 无法下载的问题:NO EPCS LAYOUT DATA --- LOOKING FOR SECTION [EPCS-XXXXXX]
- C_const
- gcc/g++ 如何支持c11 / c++11标准编译
- 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
- 管理维护Replica Sets
- Js中常用知识点(typeof、instanceof、动态属性、变量作用域)
- 关闭VS2017脚本调试 已启用 Visual Studio 中的 Chrome 脚本调试
- H: Dave的组合数组(二分法)
- JDK动态代理源码解析
- Operation(Swift)
- 每天CSS学习之direction
- JavaScript中变量的相互引用
- 显示所有环境变量:env 或者 printenv
- Java堆栈解析
热门文章
- 特殊计数序列——第二类斯特林(stirling)数
- java返回json设置自定义的格式
- YUI Compressor
- calico客户端工具calicoctl
- TODO springboot学习笔记
- mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user &#39;mhz&#39;@&#39;localhost&#39; (using password: YES)
- DirectX11--深入理解与使用缓冲区资源
- 阿里云OSS的Bucket容量大小采集
- 我的长大app开发教程第一弹:Fragment布局
- element ui change 传递带自定义参数