为什么我的程序只能获取网页源代码的一部分?

时间:2011-08-31 18:03:39

标签: java php web-scraping web-crawler

我有一个程序来提取网页的源代码并将其保存为.txt文件。如果一次完成只有一个,它可以工作,但是当我经历一个100页的循环时,每个页面源都开始在1/4到3/4之间切断(似乎是任意)。关于为什么或如何解决这个问题的任何想法?

最初的想法是循环对于java来说太快了(我从php脚本运行这个java),但后来认为它在技术上不应该转到下一个项目,直到当前条件完成。

以下是我正在使用的代码:

import java.io.*;
import java.net.URL;

public class selectout {

public static BufferedReader read(String url) throws Exception{
    return new BufferedReader(
        new InputStreamReader(
            new URL(url).openStream()));}

public static void main (String[] args) throws Exception{
    BufferedReader reader = read(args[0]);
    String line = reader.readLine();
    String thenum = args[1];
    FileWriter fstream = new FileWriter(thenum+".txt");
    BufferedWriter out = new BufferedWriter(fstream);
    while (line != null) {

          out.write(line);
          out.newLine();
        //System.out.println(line);
        line = reader.readLine(); }}
}

PHP是基本的mysql_query while(fetch_assoc)从数据库中获取网址,然后运行system("java -jar crawl.jar $url $filename");

然后,它fopenfread新文件,最后将源保存到数据库(在escaping_strings等之后)。

2 个答案:

答案 0 :(得分:2)

完成每个文件的编写后,需要关闭输出流。在while循环之后,调用out.close();和fstream.close();

答案 1 :(得分:0)

您必须清除流并关闭它。

finally{  //Error handling ignored in my example
    fstream.flush();  
    fstream.close();  
}