用Swing寫個scrapy爬蟲圖形介面 Ⅱ
阿新 • • 發佈:2019-01-05
因為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,這次增加了一個下載欄。
使用的話 我貼個視訊連結: