關於爬蟲方面本人小白一個,通過無所不能的度娘,從中汲取營養,得到一個簡單的能用的例子,在這分享一下,供大家一起汲取.
首先說一下,你想從一個頁面中獲取到你想要的數據,首先你要先得到這個頁面.然后把獲取到的頁面
使用Jsoup解析成 Document對象 之后進行一系列的操作.文字功底有限,直接上代碼:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; public class test { public static void main(String[] args) throws IOException { System.out.println("開始"); test d=new test(); String str=d.getHtml(); d.readHtml(str); System.out.println("結束"); }
//這就是通過url獲取整個頁面 返回頁面的字符串 public String getHtml() throws IOException { StringBuffer buffer = new StringBuffer();
//連接的url String urlpath="http://www.dyhjw.com/dyhjw/etf.html"; URL url = new URL(urlpath); URLConnection conn = url.openConnection(); InputStream in =conn.getInputStream(); //字節流-》字符流 InputStreamReader InputStreamReader reader = new InputStreamReader(in,"utf-8"); //按行 讀出來 BufferedReader breader = new BufferedReader(reader); //讀取數據 String line = ""; while((line= breader.readLine())!=null) { buffer.append(line); } return buffer+""; } //讀取頁面的字符串 public void readHtml(String html){ //使用Jsoup解析html 成Document對象 Document document = Jsoup.parse(html); //獲取頁面中table 的tr部分 Elements trs=document.select("table").select("tr"); List<Object[]> list=new ArrayList<>();
//輸出的位置 File file =new File("d://xxxx.txt"); FileWriter fWriter= null; if(!file.exists()) { try { file.createNewFile(); fWriter= new FileWriter(file); fWriter.append("日期(北京)\t凈持倉量(噸)\t總價值(美元)\t增減(噸)\t影響(金銀)\r\n"); for (int i = 1; i < trs.size(); i++) { Elements tds=trs.get(i).select("td"); Object[]obj={ tds.get(0).text(), Double.parseDouble(tds.get(1).text()), Double.parseDouble(tds.get(2).text()), tds.get(3).text(), tds.get(4).text() }; list.add(obj); String txt = ""; for (int j = 0; j < tds.size(); j++) { if (txt == "") { txt = tds.get(j).text(); }else { txt = txt + "\t"+tds.get(j).text(); } } fWriter.append( txt+"\r\n"); fWriter.flush(); } }catch (IOException e) { e.printStackTrace(); }finally { try { fWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
每天進步一點點,大家共勉