第一次写爬虫,被乱码问题困扰两天,试了很多方法都不可以,今天随便一试,居然好了。
在获取网页时创建了一个缓冲字节输入流,问题就在这个流上,添加标红代码即可
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(
connection.getInputStream(),"utf-8"));
附上代码,以供参考。
1 public String sendGet(String url) { 2 Writer write = null; 3 // 定义一个字符串用来存储网页内容 4 String result = null; 5 // 定义一个缓冲字符输入流 6 BufferedReader in = null; 7 try { 8 // 将string转成url对象 9 URL realUrl = new URL(url); 10 // 初始化一个链接到那个url的连接 11 URLConnection connection = realUrl.openConnection(); 12 // 开始实际的连接 13 connection.connect(); 14 // 初始化 BufferedReader输入流来读取URL的响应 15 in = new BufferedReader(new InputStreamReader( 16 connection.getInputStream(),"utf-8")); 17 // 用来临时存储抓取到的每一行的数据 18 String line; 19 20 File file = new File(saveEssayUrl, fileName); 21 File file2 = new File(saveEssayUrl); 22 23 if (file2.isDirectory() == false) { 24 file2.mkdirs(); 25 try { 26 file.createNewFile(); 27 System.out.println("********************"); 28 System.out.println("创建" + fileName + "文件成功!!"); 29 30 } catch (IOException e) { 31 e.printStackTrace(); 32 } 33 34 } else { 35 try { 36 file.createNewFile(); 37 System.out.println("********************"); 38 System.out.println("创建" + fileName + "文件成功!!"); 39 } catch (IOException e) { 40 e.printStackTrace(); 41 } 42 } 43 Writer w = new FileWriter(file); 44 45 while ((line = in.readLine()) != null) { 46 // 遍历抓取到的每一行并将其存储到result里面 47 // line = new String(line.getBytes("utf-8"),"gbk"); 48 w.write(line); 49 w.write("\r\n"); 50 result += line; 51 } 52 w.close(); 53 } catch (Exception e) { 54 System.out.println("发送GET请求出现异常!" + e); 55 e.printStackTrace(); 56 } 57 // 使用finally来关闭输入流 58 finally { 59 try { 60 if (in != null) { 61 in.close(); 62 } 63 64 } catch (Exception e2) { 65 e2.printStackTrace(); 66 } 67 } 68 return result; 69 }
时间: 2024-10-09 05:07:53