Java解析HTML中内容并存储到数据库的完整攻略
在Java中,我们可以使用Jsoup库来解析HTML内容,并使用Java的数据访问对象(DAO)模式将数据存储到数据库中。
1. 概述
在本篇攻略中,我们将通过抓取一个网站上的新闻列表,并将新闻内容解析并存储到数据库中的方式,介绍Java如何解析HTML中的内容并存储到数据库的完整流程。
2. 抓取和解析网页
我们将用Jsoup库来完成抓取和解析网页的功能,具体步骤如下:
- 首先,通过URL获取HTML页面内容:
String url = "http://www.example.com/news";
Document doc = Jsoup.connect(url).get();
- 然后,我们可以使用选择器从HTML中获取需要的内容,比如:
Elements newsHeadlines = doc.select("div.news-list h2");
这将获取页面中所有<div class="news-list">
下面的<h2>
标签内容,即新闻标题。
Elements newsDescriptions = doc.select("div.news-list p");
这将获取页面中所有<div class="news-list">
下面的<p>
标签内容,即新闻描述。
3. 存储到数据库
我们可以使用Java的JDBC(Java Database Connectivity)技术来连接数据库,使用数据访问对象(DAO)模式将获取到的数据存储到数据库中。
- 首先,需要引入JDBC库:
import java.sql.*;
- 然后,需要建立数据库连接:
String url = "jdbc:mysql://localhost:3306/news";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
这里假设数据库名为news,用户名和密码分别为root。
- 接下来,我们可以定义数据模型来存储新闻数据:
```
public class News {
private String title;
private String description;
public News(String title, String description) {
this.title = title;
this.description = description;
}
// getter和setter方法...
}
```
- 我们可以使用PreparedStatement对象来执行SQL语句,并将获取到的数据存储到数据库中:
String sql = "INSERT INTO news (title, description) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
for (Element headline : newsHeadlines) {
for (Element description : newsDescriptions) {
News news = new News(headline.text(), description.text());
pstmt.setString(1, headline.text());
pstmt.setString(2, description.text());
pstmt.executeUpdate();
}
}
这将会将每个新闻标题和描述存储到news表中。
- 最后,需要关闭数据库连接:
pstmt.close();
conn.close();
4. 示例
这里我们以新浪新闻网站为例,抓取并解析其首页上的新闻列表,并将新闻标题和描述存储到MySQL数据库中。抓取和解析网页的代码示例如下所示:
public static void main(String[] args) throws Exception {
String url = "http://news.sina.com.cn/";
Document doc = Jsoup.connect(url).get();
Elements newsHeadlines = doc.select("div[data-sudaclick='news_article'] a[href^='https']");
Elements newsDescriptions = doc.select("div[data-sudaclick='news_article'] p");
for (Element headline : newsHeadlines) {
for (Element description : newsDescriptions) {
News news = new News(headline.text(), description.text());
saveNewsToDatabase(news);
}
}
}
public static void saveNewsToDatabase(News news) throws Exception {
String url = "jdbc:mysql://localhost:3306/news";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "INSERT INTO news (title, description) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, news.getTitle());
pstmt.setString(2, news.getDescription());
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
这将会将新浪新闻网站首页上的新闻标题和描述存储到名为news的数据库中的news表中。
5. 结论
Java解析HTML中内容并存储到数据库的完整攻略如上所示,我们可以使用Jsoup库来完成内容的解析,使用JDBC技术来连接数据库,并使用数据访问对象模式将数据存储到数据库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何解析html中的内容并存到数据库详解 - Python技术站