关于爬虫方面本人小白一个,通过无所不能的度娘,从中汲取营养,得到一个简单的能用的例子,在这分享一下,供大家一起汲取.
首先说一下,你想从一个页面中获取到你想要的数据,首先你要先得到这个页面.然后把获取到的页面
使用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(); } } } } }
每天进步一点点,大家共勉