不同的类中调用相同的方法程序运行结果不同

        问题描述:用java写一个爬取百度图片的程序,在网上找了一个代码之后运行,出现了一个大的问题。除了再编写爬虫的代码中能够运行成功之外,在其他类中调用这个方法都爬取不了数据。(爬虫程序写在Test类中)

        Test类中的代码如下:

package com.dfy.crawler;

import org.jsoup.nodes.Document;

import com.dfy.util.Html;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
package com.dfy.crawler;
import org.jsoup.nodes.Document;
import com.dfy.util.Html;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author:
 * @Date:2018/5/22
 */

public class Test {

	public static void main(String[] args) throws Exception {
		Test.getPictures(); 
	}

	public  static void getPictures() throws Exception { 
		System.out.println("开始在百度爬取图片");
		int max=4;
		String keyword="七百弄";
		for (int page = 0; page <= max; page++) {
			System.out.println("正在解析第" + page + "页面");
			Document doc = null;
			String url = "http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=" + keyword
					+ "&cg=star&pn=" + page * 30 + "&rn=30&itg=0&z=0&fr=&width=&height=&lm=-1&ic=0&s=0&st=-1&gsm="
					+ Integer.toHexString(page * 30);
			doc = new Html(url).getDocument();//本质是使用Joup获取Docment,Html类是封装后的
			String reg = "objURL\":\"http://.+?\\.jpg";
			Pattern pattern = Pattern.compile(reg);
			Matcher m = pattern.matcher(doc.html());
			while (m.find()) {
				String URL = m.group().substring(9);
				System.out.println(URL);
//				imgurl.add(URL);
//				source.add("百度");
			}
		}
		System.out.println("百度的图片爬取完成");
	}
}

      运行结果如下:


      从运行结果可以看出:已经爬取到了图片的url。


       这个时候写另一个测试类是调用原来的方法。代码如下:

package com.dfy.crawler;

public class Test2 {
	public static void main(String[] args) throws Exception {
		Test.getPictures();
	}
}

  从代码可以看出, Test2的运行结果应该和Test的运行结果一样

  但是运行结果是:

     从运行结果可以看出,根本没有爬取到相关的url。

     那么问题出在哪里呢?

     经过一段时间的观察,我发现两个文件使用的编码不同,在Test中保存的时候因为有中文提示我保存为其他编码,有utf-8和默认的编码,默认的是gbk的编码。我习惯性的选择了utf-8。导致两者的编码不同,要传递给百度的url中的word字段是中文,传递过程种会编码。百度的应该是使用utf-8这种编码方式的,所以在Test2中出现了解析不成功。

      最后把Test的编码改成utf-8就可以运行成功了。(里面的中文全部乱码,需要重新改回来)



爬虫程序参考地址:https://blog.csdn.net/greatkendy123/article/details/51759040

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值