获取百島的歌曲name ,歌手와链接!!
复代码代码如下:
webTools 패키지;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
java.net.URL 가져오기;
import java.util.ArrayList;
java.util.HashMap 가져오기;
java.util.List 가져오기;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
dbTools.DBTools 가져오기;
공개 클래스 IOTOWeb {
공개 문자열 getHtmlContent(String htmlURL) {
URL url = null;
문자열 rowContent = "";
StringBuffer htmlContent = 새로운 StringBuffer();
노력하다 {
url = 새 URL(htmlURL);
BufferedReader in = 새 BufferedReader(새 InputStreamReader(url)
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
넣다();
} catch (MalformedURLException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
} 잡기(UnsupportedEncodingException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
} 잡기(IOException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
htmlContent.toString()을 반환합니다.
}
공개 목록 getLink(String htmlContent) {
ArrayList listLink = new ArrayList();
문자열 정규식 = "<td[^>]*>[//(]*<a[^>]*href=(/"([^/"]*)/"|/'([^/']* )/'|([^//s>]*))[^>]*>(.*?)[//)]*[//s]*</td>";
패턴 패턴 = Pattern.compile(regex, Pattern.DOTALL);
일치자 matcher = Pattern.matcher(htmlContent);
동안(matcher.find()) {
listLink.add(matcher.group());
}
목록링크 반환;
}
공개 List<String> getHref(String htmlContent) {
문자열 정규식;
목록 listtHref = new ArrayList();
정규식 = "href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*))/"";
패턴 pa = Pattern.compile(regex, Pattern.DOTALL);
일치자 ma = pa.matcher(htmlContent);
동안(ma.find()) {
listtHref.add(ma.group().replaceFirst("href=""", "").replace("/"",
""));
}
listtHref를 반환합니다.
}
공개 목록<String> getPerson(String htmlContent) {
문자열 정규식;
목록 목록 = new ArrayList();
정규식 = "//(<a[^>]*href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>] *))[^>]*>(.*?)//)";
패턴 pa = Pattern.compile(regex, Pattern.DOTALL);
일치자 ma = pa.matcher(htmlContent);
동안(ma.find()) {
list.add(ma.group().replaceFirst("href=""", "").replace("/"", ""));
}
반환 목록;
}
공개 목록<String> getSongName(String htmlContent) {
문자열 정규식;
목록 listPerson = new ArrayList();
정규식 = "<a[^>]*href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*)) [^>]*>(.*?)</a>//s";
패턴 pa = Pattern.compile(regex, Pattern.DOTALL);
일치자 ma = pa.matcher(htmlContent);
동안(ma.find()) {
listPerson.add(ma.group());
}
반환 목록Person;
}
공개 문자열 getMainContent(String htmlContent) {
문자열 정규식 = "<table width=/"100%/" align="center/" cellpadding="0/" cellpacing="0/" class=/"list/">(.*?)</ 테이블>";
StringBuffer mainContent = 새로운 StringBuffer();
패턴 패턴 = Pattern.compile(regex, Pattern.DOTALL);
일치자 matcher = Pattern.matcher(htmlContent);
동안(matcher.find()) {
mainContent.append(matcher.group());
}
mainContent.toString()을 반환합니다.
}
공개 문자열 outTag(최종 문자열 s) {
return s.replaceAll("<.*?>", "");
}
DBTools dbTools = 새로운 DBTools();
public void getFromBaiduMap3(String htmlURL)이 Throwable {를 발생시킵니다.
HashMap htmlContentMap = new HashMap();
문자열 htmlContent = getHtmlContent(htmlURL);
String mainContent = getMainContent(htmlContent);
목록 listLink = getLink(mainContent);
for (int j = 0; j < listLink.size(); j++) {
문자열 tdTag = listLink.get(j).toString();
목록 songNameList = getSongName(tdTag);
String songName = outTag(songNameList.get(0).toString());
list personList = getPerson(tdTag);
문자열 songPerson = "";
if (personList.size() != 0) {
for (int n = 0; n < personList.size(); n++) {
// System.out.println(personList.get(n).toString());
songPerson = outTag(personList.get(n).toString());
}
} 또 다른 {
songPerson = "无";
}
// System.out.print(songNameList.get(0).toString());
List hrefList = getHref(songNameList.get(0).toString());
String songHref = hrefList.get(0).toString();
System.out.println();
String sql = "song(songName,songPerson,songHref) 값(?,?,?)에 삽입";
ArrayList list_values = new ArrayList();
list_values.add(노래이름);
list_values.add(songPerson);
list_values.add(songHref);
dbTools.update(sql, list_values);
}
}
}
DBTools 도구:
复代码代码如下:
dbTools 패키지;
import java.util.ArrayList;
import java.sql.*;
공개 클래스 DBTools {
개인용 ReadyStatement prepareStatement;
개인 결과 집합 결과 집합;
개인 연결 연결;
공개 DBTools() {
노력하다 {
Class.forName("com.mysql.jdbc.Driver");
} 잡기(ClassNotFoundException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
노력하다 {
연결 = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/TestURL", "루트", "zhuyi");
} 잡기(SQLException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
}
공개 ArrayList 쿼리(String sql, ArrayList list_values)에서 Throwable {
ArrayList listRows = new ArrayList();
prepareStatement = 연결.prepareStatement(sql);
for (int i = 0; i < list_values.size(); i++) {
prepareStatement.setObject(i + 1, list_values.get(i));
}
resultSet = prepareStatement.executeQuery();
동안(resultSet.next()) {
String[] rowinfo = 새로운 String[resultSet.getMetaData()
.getColumnCount()];
for (int i = 0; i < rowinfo.length; i++) {
rowinfo[i] = resultSet.getString(i + 1);
}
listRows.add(rowinfo);
}
목록 행 반환;
}
공개 무효 업데이트(String sql, ArrayList list_values)가 Throwable {를 발생시킵니다.
prepareStatement = 연결.prepareStatement(sql);
for (int i = 0; i < list_values.size(); i++) {
prepareStatement.setObject(i + 1, list_values.get(i));
}
prepareStatement.executeUpdate();
prepareStatement.close();
}
}
서블릿 사용:
复代码代码如下:
패키지 컨트롤러;
import java.io.IOException;
import java.io.PrintWriter;
java.util.List 가져오기;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
webTools.IOTOWeb 가져오기;
공개 클래스 TestURL은 HttpServlet을 확장합니다.
/**
* 객체의 생성자.
*/
공개 테스트URL() {
감독자();
}
/**
* 서블릿의 파괴. <br>
*/
공공 무효 파괴() {
super.destroy(); // 로그에 "destroy" 문자열을 넣습니다.
// 여기에 코드를 입력하세요
}
/**
* 서블릿의 doGet 메소드. <br>
*
* 이 메소드는 양식의 태그 값 메소드가 get과 같을 때 호출됩니다.
*
* @param 요청
* 클라이언트가 서버에 보내는 요청
* @param 응답
* 서버가 클라이언트에게 보내는 응답
* @throws ServletException
* 오류가 발생한 경우
* @IOException 발생
* 오류가 발생한 경우
*/
공개 무효 doGet(HttpServletRequest 요청, HttpServletResponse 응답)
ServletException, IOException이 발생합니다.
노력하다 {
IOTOWeb iotoWeb = 새로운 IOTOWeb();
iotoWeb.getFromBaiduMap3("http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2");
} 잡기 (Throwable e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
}
}
/**
* 서블릿의 doPost 메소드. <br>
*
* 이 메소드는 양식의 태그 값 메소드가 다음과 같을 때 호출됩니다.
* 우편.
*
* @param 요청
* 클라이언트가 서버에 보내는 요청
* @param 응답
* 서버가 클라이언트에게 보내는 응답
* @throws ServletException
* 오류가 발생한 경우
* @IOException 발생
* 오류가 발생한 경우
*/
공개 무효 doPost(HttpServletRequest 요청, HttpServletResponse 응답)
ServletException, IOException이 발생합니다.
response.setContentType("text/html");
PrintWriter 출력 = response.getWriter();
밖으로
.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 전환//EN/">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>서블릿</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" 이것은 ");
out.print(this.getClass());
out.println(", POST 메소드 사용");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
종료.닫기();
}
/**
* 서블릿 초기화. <br>
*
* @throws ServletException
* 오류가 발생한 경우
*/
public void init()에서 ServletException이 발생합니다.
// 여기에 코드를 입력하세요
}
}
获取金书网의图书name:
复代码代码如下:
webTools 패키지;
import java.io.BufferedReader;
import java.io.InputStreamReader;
java.net.URL 가져오기;
import java.util.ArrayList;
java.util.List 가져오기;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
dbTools.DBTools 가져오기;
공개 클래스 GetBook {
public String getHtmlContent(String htmlURL)는 Throwable {를 발생시킵니다.
URL url = null;
문자열 rowContent = "";
StringBuffer htmlContent = 새로운 StringBuffer();
url = 새 URL(htmlURL);
BufferedReader in = 새 BufferedReader(새 InputStreamReader(url)
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
넣다();
htmlContent.toString()을 반환합니다.
}
공개 문자열 getBookName(String htmlContent) {
문자열 bookName = "";
문자열 정규식 = "<span class=/"style15/">[^>]*</span>";
패턴 패턴 = Pattern.compile(regex, Pattern.DOTALL);
일치자 matcher = Pattern.matcher(htmlContent);
if (matcher.find()) {
bookName = matcher.group();
}
도서명 반환;
}
공개 문자열 outTag(최종 문자열 s) {
return s.replaceAll("<.*?>", "");
}
DBTools dbtools = 새로운 DBTools();
public void getFromJINSHU(String htmlURL)가 Throwable {를 발생시킵니다.
문자열 htmlContent = getHtmlContent(htmlURL);
String bookName = outTag(getBookName(htmlContent));
if (bookName != null && !"".equals(bookName)) {
System.out.println(책이름);
String sql = "bookinfo(bookName) 값에 삽입(?)";
ArrayList list_values = new ArrayList();
list_values.add(책이름);
dbtools.update(sql, list_values);
}
}
}
사용서블릿:
复代码代码如下:
패키지 컨트롤러;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
webTools.GetBook 가져오기;
공개 클래스 TestBook은 HttpServlet을 확장합니다.
/**
* 객체의 생성자.
*/
공개 TestBook() {
감독자();
}
/**
* 서블릿의 파괴. <br>
*/
공공 무효 파괴() {
super.destroy(); // 로그에 "destroy" 문자열을 넣습니다.
// 여기에 코드를 입력하세요
}
/**
* 서블릿의 doGet 메소드. <br>
*
* 이 메소드는 양식의 태그 값 메소드가 get과 같을 때 호출됩니다.
*
* @param 요청
* 클라이언트가 서버에 보내는 요청
* @param 응답
* 서버가 클라이언트에게 보내는 응답
* @throws ServletException
* 오류가 발생한 경우
* @IOException 발생
* 오류가 발생한 경우
*/
int i = 1;
공개 무효 doGet(HttpServletRequest 요청, HttpServletResponse 응답)
ServletException, IOException이 발생합니다.
GetBook bookinfo = new GetBook();
for (; i < 10000; i++) {
문자열 bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+ ".html";
노력하다 {
bookinfo.getFromJINSHU(bookURL);
} 잡기 (Throwable e) {
나++;
doPost(요청, 응답);
}
}
}
/**
* 서블릿의 doPost 메소드. <br>
*
* 이 메소드는 양식의 태그 값 메소드가 다음과 같을 때 호출됩니다.
* 우편.
*
* @param 요청
* 클라이언트가 서버에 보내는 요청
* @param 응답
* 서버가 클라이언트에게 보내는 응답
* @throws ServletException
* 오류가 발생한 경우
* @IOException 발생
* 오류가 발생한 경우
*/
공개 무효 doPost(HttpServletRequest 요청, HttpServletResponse 응답)
ServletException, IOException이 발생합니다.
GetBook bookinfo = new GetBook();
for (; i < 10000; i++) {
문자열 bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+ ".html";
노력하다 {
bookinfo.getFromJINSHU(bookURL);
} 잡기 (Throwable e) {
나++;
doGet(요청, 응답);
}
}
}
/**
* 서블릿 초기화. <br>
*
* @throws ServletException
* 오류가 발생한 경우
*/
public void init()에서 ServletException이 발생합니다.
// 여기에 코드를 입력하세요
}
}
每种功能的实现방법은 더 많고, 希望各位可以交流는 서로 다른 방식의 방법입니다.可以加QQ412546724。呵呵