第一次写爬虫,被乱码问题困扰两天,试了很多方法都不可以,今天随便一试,居然好了。
在获取网页时创建了一个缓冲字节输入流,问题就在这个流上,添加标红代码即可
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 }
|