1. 程式人生 > >用Swing寫個scrapy爬蟲圖形介面 Ⅱ

用Swing寫個scrapy爬蟲圖形介面 Ⅱ

因為eclipse上沒有matisse form,所以不好再次修改我上次寫的圖形介面,所以呢,下了個Myeclipse,使用matisse form重新寫了下此爬蟲的GUI。

主要程式碼 :

/*
 * scs.java
 *
 * Created on __DATE__, __TIME__
 */

package cd.ccx;

import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import
java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.awt.TextComponent; import com.mongodb.BasicDBObject; import com.mongodb.DB; import
com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.Mongo; import com.mongodb.MongoException; /** * * @author __USER__ */ public class scs extends javax.swing.JFrame { public StringBuffer Download_link = new StringBuffer(); /** Creates new form scs */ public scs
() { initComponents(); } //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { button1 = new java.awt.Button(); label1 = new java.awt.Label(); button2 = new java.awt.Button(); button3 = new java.awt.Button(); textArea1 = new java.awt.TextArea(); label2 = new java.awt.Label(); textField1 = new java.awt.TextField(); button4 = new java.awt.Button(); label3 = new java.awt.Label(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); button1.setLabel("\u5f00\u59cb\u722c\u866b :"); button1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { String command_start="cmd /k start cmd.bat"; //E:\\scrapy---測試用2\\GitHub\\ scrapy crawl github"; Runtime r=Runtime.getRuntime(); try { Process ps=r.exec(command_start); } catch (IOException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } }); label1.setText("Scrapy crawl github"); button2.setLabel("\u7ed3\u675f\u722c\u866b :"); button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Runtime.getRuntime().exec("TaskKill /IM cmd.exe"); } catch (IOException e1) { // TODO 自動生成的 catch 塊 e1.printStackTrace(); } } }); button3.setLabel("\u4ece\u6570\u636e\u5e93\u4e2d\u83b7\u53d6\u4fe1\u606f :"); button3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { button3ActionPerformed(evt); } }); label2.setText("\u8f93\u5165\u4f60\u60f3\u4e0b\u8f7d\u7684\u9879\u76ee\uff08\u7528\u6237/\u9879\u76ee\u540d\uff09 :"); textField1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { //textField1.setText("gh"); } }); button4.setLabel("\u4e0b\u8f7d!..."); //final String tf=textField1.getText(); /*button4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String tf=textField1.getText(); } });*/ button4.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent arg0) { String command1="cmd /k start python download.py "; String tf=textField1.getText(); //getName()就行 getText()就不行 wocwoc //String command2="xx"; //final String tf=textField1.getText(); //String tf="phpenterprise/bootstrap-lean";//textField1.getText(); String command2="https://github.com/"+tf+"/archive/master.zip"; String command=command1+command2; //String command="cmd /k start "+command2;//command1+command2; Runtime r=Runtime.getRuntime(); try { Process px=r.exec(command); } catch (IOException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } }); label3.setText("Stop crawling"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout( getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addGap(26, 26, 26) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent( button3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( button1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(20, 20, 20) .addComponent( label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(79, 79, 79) .addComponent( button2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(37, 37, 37) .addComponent( label3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup( layout.createSequentialGroup() .addComponent( label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(25, 25, 25) .addComponent( textField1, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(32, 32, 32) .addComponent( button4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup( layout.createSequentialGroup() .addGap(74, 74, 74) .addComponent( textArea1, javax.swing.GroupLayout.PREFERRED_SIZE, 521, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(37, Short.MAX_VALUE))); layout.setVerticalGroup(layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addGap(21, 21, 21) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.TRAILING) .addComponent( button2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( button1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( label3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup( layout.createSequentialGroup() .addGap(29, 29, 29) .addComponent( button3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(42, 42, 42)) .addGroup( layout.createSequentialGroup() .addGap(56, 56, 56) .addComponent( textArea1, javax.swing.GroupLayout.DEFAULT_SIZE, 212, Short.MAX_VALUE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED))) .addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.TRAILING) .addComponent( label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( textField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent( button4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(41, 41, 41))); pack(); }// </editor-fold> //GEN-END:initComponents private void textField1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: //textField1.setText("gh"); } private void button4ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: //String tf=textField1.getText();//xiaokuan //String a[] = tf.split(","); //String ta=textArea1.getText();//dakuan /*String s = textField1.getText(); String a[] = s.split(","); String xx = "{ [username] : BellaMarquez [popular_repos] : openfaqs [popular_repos_star]: 0 [the download_link]: https://github.com/BellaMarquez/openfaqs/archive/master.zip[ popular_repos_info]: An Open Source FAQ Board }{ [username] : Gerst20051 [popular_repos] : HnS-Desktop [popular_repos_star]: 5 [the download_link]: https://github.com/Gerst20051/HnS-Desktop/archive/master.zip[ popular_repos_info]: Homenet Spaces OS. A jQuery web desktop }"; for (int i = 0; i < a.length; i++) { // Pattern p = Pattern.compile(a[i]); //Matcher m = p.matcher(xx); String a1[] = a[i].split(":"); Pattern p = Pattern.compile("https://github.com/" + a1[0] + "/" + a1[1] + "/archive/master.zip"); Matcher m = p.matcher(xx); while (m.find()) { String mg = m.group(0); Download_link.append(mg); // if(mg.indexOf(a[i])){} //System.out.println(mg); } }*/ } private void button3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Mongo m = null; try { m = new Mongo("localhost", 27017); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MongoException e) { // TODO Auto-generated catch block e.printStackTrace(); } DB db = m.getDB("github"); DBCollection dbCol = db.getCollection("github38_info"); DBCursor x = dbCol.find(); while (x.hasNext()) { BasicDBObject bdbObj = (BasicDBObject) x.next(); if (bdbObj != null) { String xxxx = "{ [使用者] : " + bdbObj.getString("username") + " [最熱門專案]: " + bdbObj.getString("popular_repos") + " [專案stars]: " + bdbObj.getString("popular_repos_star") + " [專案下載連結]: " + bdbObj.getString("popular_repos_download") + " [專案資訊]: " + bdbObj.getString("popular_repos_info") + " }" + "\n"; //textArea_1.append("{ [username] : "+bdbObj.getString("username")+" [popular_repos] : "+bdbObj.getString("popular_repos")+" [popular_repos_star]: "+bdbObj.getString("popular_repos_star")+" [the download_link]: "+bdbObj.getString("popular_repos_download")+"[ popular_repos_info]: "+bdbObj.getString("popular_repos_info")+" }"); if ((bdbObj.getString("popular_repos") != "None")) //此判斷句沒用 { textArea1.append(xxxx); textArea1.append("\n"); } } } } private void button1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new scs().setVisible(true); } }); } //GEN-BEGIN:variables // Variables declaration - do not modify private java.awt.Button button1; private java.awt.Button button2; private java.awt.Button button3; private java.awt.Button button4; private java.awt.Label label1; private java.awt.Label label2; private java.awt.Label label3; private java.awt.TextArea textArea1; private java.awt.TextField textField1; // End of variables declaration//GEN-END:variables }

引用的庫依舊是 mongo-java-driver-2.65。

比起之前的GUI,這次增加了一個下載欄。

這裡寫圖片描述

使用的話 我貼個視訊連結: