我采用多线程进行任务抓取 也可以采用单线程
public void begin() {
//获取虎扑新闻的数据,网址格式为:https://voice.hupu.com/nba/第几页
new Thread(new Runnable() {
@Override
public void run() {
try{
Document doc = Jsoup.connect(“https://voice.hupu.com/nba/”).get();
Elements titleLinks = doc.select(“div.list-hd”); //解析来获取每条新闻的标题与链接地址
Elements timeLinks = doc.select(“div.otherInfo”); //解析来获取每条新闻的时间与来源
//for循环遍历获取到每条新闻的四个数据并封装到News实体类中
for(int j = 0;j < titleLinks.size();j++){
String title = titleLinks.get(j).select(“a”).text();
String uri = titleLinks.get(j).select(“a”).attr(“href”);
Document doc1 = Jsoup.connect(uri).get();
Elements desLinks=doc1.select(“div.artical-main-content”);
String desc=””;
if(desLinks.size()!=0){
Elements e=desLinks.select(“p”);
for(int z = 0;z < e.size();z++){
desc+=e.get(z).text();
}
}else{
desc=”0″;
}
String time = timeLinks.get(j).select(“span.other-left”).select(“a”).text();
News news = new News(title,uri,desc,time);
String sql =”insert into bll_pageinfo values (null,?,?,?,?)”;
String[] parameters = { news.getNewsTitle(), news.getNewsUrl(), news.getDesc(), news.getNewsTime()};
DbAction.executeUpdate(sql,parameters );
System.out.println(“当前的线程为:”+Thread.currentThread().getName());
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
获取的数据保存到数据库 自己数据库可以配置字段跟实体类对应
我的数据库是mysql,小伙伴也可以根据自己的来选择
public class DbAction {
public static int executeUpdate(String sql, String[] parameters) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
for (int i = 0; i < parameters.length; i++) {
pstmt.setString(i + 1, parameters[i]);
}
result = pstmt.executeUpdate();
} catch (SQLException err) {
err.printStackTrace();
free(null, pstmt, conn);
} finally {
free(null, pstmt, conn);
}
return result;
}
}
实体类封装抓取的数据
public class News {
private String newsTitle; //新闻标题
private String newsUrl; //新闻链接地址
private String desc; //新闻概要
private String newsTime; //新闻时间与来源
public News(String newsTitle, String newsUrl, String desc, String newsTime) {
this.newsTitle = newsTitle;
this.newsUrl = newsUrl;
this.desc = desc;
this.newsTime = newsTime;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getNewsTime() {
return newsTime;
}
public void setNewsTime(String newsTime) {
this.newsTime = newsTime;
}
public String getNewsTitle() {
return newsTitle;
}
public void setNewsTitle(String newsTitle) {
this.newsTitle = newsTitle;
}
public String getNewsUrl() {
return newsUrl;
}
public void setNewsUrl(String newsUrl) {
this.newsUrl = newsUrl;
}
}
个人亲测有效
需要的jar包
本人JDK使用的1.8
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34545.html