2017-06-12 3 views
0

他のリンクを調べましたが、解決策を見つけることができません。 私は353のリンクに接続することができ、約7分で必要なデータをスクラップします。私は1分以内に時間を減らす必要があります。BufferedWriterを使用してJavaで353のWebページを高速に取得する方法

以下に私のコードを含めました。

URL urlChartLink; 
URLConnection urlconn; 

try { 
    Class.forName(driver).newInstance(); 
    Connection mysqlconn = DriverManager.getConnection(url + dbName, userName, password); 
    Statement st1 = mysqlconn.createStatement(); 
    Connection mysqlconn2 = DriverManager.getConnection(url + dbName, userName, password); 
    ResultSet rs1 = st1.executeQuery(strSQL); 

    while (rs1.next()) 
    { 
     sElementID = rs1.getString(1); 
     sSymbol = rs1.getString(2); 
     sChartLink = rs1.getString(3); 

     urlChartLink = new URL(sChartLink); 
     urlconn = urlChartLink.openConnection(); 
     urlconn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 

     sCurrentPrice = ""; 
     sPriceChange = ""; 

     try { 
      BufferedReader in = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));     
      String currentLine; 

      int iLine = 0; 

      while ((currentLine = in.readLine()) != null) { 
       //Get data from page 
       iLine += 1; 

      } 
      in.close(); 
     } catch (IOException e) { 

    } 

    st1.close(); 

    mysqlconn.close(); 
    mysqlconn2.close(); 

} 

私はURLConnectionなしで試しましたが、403エラーが発生します。

誰かが私にこのより良い解決策を与えることができれば、それは素晴らしいことでしょう!

Eddi Rae

+0

タイミングについてはわかりませんが、ウェブスクレイピングにはjSoupを使用します。 –

答えて

1

スレッドでExecutorServiceを使用します。このコードは100%構文エラーはありませんが、正しいアイデアを与えるはずです。

Class.forName(driver).newInstance(); 
Connection mysqlconn = DriverManager.getConnection(url + dbName, userName, password); 
Statement st1 = mysqlconn.createStatement(); 
Connection mysqlconn2 = DriverManager.getConnection(url + dbName, userName, password); 
final ResultSet rs1 = st1.executeQuery(strSQL); 
ExecutorService service = ExecutorService.newFixedThreadPool(30); 

while (rs1.next()) 
{ 
    service.execute(new Runnable() { 
     public void run() { 
      String sElementID = rs1.getString(1); 
      String sSymbol = rs1.getString(2); 
      String sChartLink = rs1.getString(3); 

      URL urlChartLink = new URL(sChartLink); 
      URLConnection urlconn = urlChartLink.openConnection(); 
      urlconn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 

      sCurrentPrice = ""; 
      sPriceChange = ""; 

      try { 
       BufferedReader in = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));     
       String currentLine; 


       while ((currentLine = in.readLine()) != null) { 
        //Call syncronized method to perform operations that need to be thread safe 
        addLine() 

       } 
       in.close(); 
      } catch (IOException e) { 

      } 
     } 
    }); 
} 

executor.shutdown(); 
while (!executer.isShutdown() { 
    Thread.sleep(100); 
} 

st1.close(); 

mysqlconn.close(); 
mysqlconn2.close(); 

public void addLine() { 
    syncronized (OBJECT_LOCK) { 
     iLine++; 
    } 
} 
関連する問題