经过,前面两篇,简单的网站基本上可以爬取下来.
下面就介绍一个 简单的有反爬机制的网站吧.
此篇主要 简单反爬的网站 post请求网页的分页 对传递参数进行加密.

分为两类:
post有参(可以在抓包工具中看到页码,可以指定页码进行爬取哪一页)
http://www.wzggzy/gxwzzbw/jyxx/001001/001001001/MoreInfo.aspx?CategoryNum=001001001

像这种页面,用抓包工具fiddler(不会用的小伙伴可以看前面的jsoup总结一),我们看到参数是经过加密的,这种加密的参数是不可能写到程序中的.
图一

图2

解决的办法:
细心的小伙伴,会在页面源码中看到,这样的代码。
没错,这就是,获取下一页的post请求传递的参数。然后他们发现这个页面,第一页为get请求,后面的才为post请求。
于是,有了一种解决办法:每次,爬取时将字符串存储起来,当进行分页时,当做参数调用。

后来将代码,升级为虚拟请求,去获取参数。
具体代码虚拟请求代码如下:

Connection connection=getCommonConnection(url)
 .timeout(60000); //请求时长
	connection
	.header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0")
	.header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
	.header("Accept-Language","zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2")
	.header("Accept-Encoding","gzip, deflate")
	.header("Connection","keep-alive")
	.header("Content-Type","application/x-www-form-urlencoded")
	.header("Cookie",cookie)
	.header("Upgrade-Insecure-Requests","1")
	.header("X-Requested-With","XMLHttpRequest");//配置模拟浏览器,设置参数
	Connection.Response response=null;
	String sessionId ="";
	response = connection.method(Connection.Method.POST).execute();// 获取响应

	// 应用JsoupHtml解析包解析html包含参数
	Document doc = Jsoup.parse(response.body());// 转换为Dom树
	// map存放post时的数据
	Map<String, String> m_data = new HashMap<String, String>();
	// 要跳转到的页数
	Elements inputElemets = doc.select("form[method=post]").first()
			.select("input[name]");

	for (Iterator it = inputElemets.iterator(); it.hasNext();) {
		Element inputElement = (Element) it.next();
		if(!"__EVENTTARGET".equals(inputElement.attr("name"))){

			m_data.put(inputElement.attr("name"), inputElement.attr("value"));
		}

	}

在返回集合.

post无参(不能指定页码进行爬取哪一页,只能通过上一页才能到达下一页的位置)
如http://ggzy.hg.gov/ceinwz/WebInfo_List.aspx?newsid=700&jsgc=0100000&zfcg=&tdjy=&cqjy=&qtjy=&PubDateSort=1&ShowPre=1&CbsZgys=0&zbfs=&qxxx=0&showqxname=0&NewsShowPre=1&wsjj=0&showCgr=0&ShowOverDate=0&showdate=1&FromUrl=jygg

这个网页,就是这样的情况。

未完,解决方案 ,待续。

更多推荐

Java爬虫之特殊案列 post请求的模拟分页