吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9583|回复: 16
收起左侧

[Java 转载] Java实现获取105发卡平台的订单信息

[复制链接]
liubenqiang 发表于 2017-3-10 18:35


虽然难度不大,但是想一次性写的很完整也不是很容易。(这里用到了一个外部jar包,叫做Jsoup,用来解析HTML文档,巨好用)
Jsoup下载链接:https://jsoup.org/packages/jsoup-1.10.2.jar

言归正传,我爬取数据的思路是 1,通过联系方式获得订单号  2,通过订单号查询获取订单详情。
所以说这里我们需要分析两个页面,好在两个页面都比较简单

(这里我就不截图了,感兴趣的可以右键查看源码,或者直接F12看一下结构)

这里需要先引入Jsoup中的几个包:


[Java] 纯文本查看 复制代码
package com.spider;
import java.io.IOException;

import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.*;


然后定义方法getSorceBy_OrderNumber(String orderNumber)   通过订单号获取订单信息
[Java] 纯文本查看 复制代码
	/**
	 * 根据订单号,查询具体的订单信息
	 * @param orderNumber
	 * 	订单号
	 * @return
	 * 	如果成功则返回true,如果出现异常,则返回false
	 * */
	public static boolean getSorceBy_OrderNumber(String orderNumber)
	{
		try {
			//这里订单信息是通过ajax进行返回
			Document doc = Jsoup.connect("http://www.105ka.com/"
					+ "checkgoods.htm?orderid="+orderNumber).get();
			
			
			String str = doc.body().text();
			System.out.println(decodeUnicode(str));
			
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}		
		return true;
	}
		


定义函数get_OrderNumber_ByContact(String contact),通过联系方式获取订单号
[Asm] 纯文本查看 复制代码
	public static boolean get_OrderNumber_ByContact(String contact)
	{
		try {
			
			Document doc = Jsoup.connect("http://www.105ka.com/orderquery.ht"
					+ "m?st=contact&kw="+contact).get();
			Elements search_result = doc.getElementsByClass("search_result");
			Elements contents = search_result.select("tr");
			
			
			for(int i=1;i<contents.size();i++)
				{
					getSorceBy_OrderNumber(contents.get(i).getAllElements().get(2).text());
				}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
		return true;
	}


注意:这里根据订单号获取订单详情的时候,会让你输入密码,而且订单详情是通过ajax返回的,所以需要从源码中找出真实url。并且通过ajax返回的订单信息是unicode编码格式,还需要转换为utf-8编码格式,故定义一个函数用来转换:
[Java] 纯文本查看 复制代码
/**
	 * unicode转字符
	 * */
	public static String decodeUnicode(String theString) {      
		char aChar;      
		int len = theString.length();      
		StringBuffer outBuffer = new StringBuffer(len);      
		for (int x = 0; x < len;) {      
			aChar = theString.charAt(x++);      
			if (aChar == '\\') {      
				aChar = theString.charAt(x++);      
				if (aChar == 'u') {      
					// Read the xxxx      
					int value = 0;      
					for (int i = 0; i < 4; i++) {      
						aChar = theString.charAt(x++);      
						switch (aChar) {      
						case '0':      
						case '1':      
						case '2':      
						case '3':      
						case '4':      
						case '5':      
						case '6':      
						case '7':      
						case '8':      
						case '9':      
							value = (value << 4) + aChar - '0';      
							break;      
						case 'a':      
						case 'b':      
						case 'c':      
						case 'd':      
						case 'e':      
						case 'f':      
							value = (value << 4) + 10 + aChar - 'a';      
							break;      
						case 'A':      
						case 'B':      
						case 'C':      
						case 'D':      
						case 'E':      
						case 'F':      
							value = (value << 4) + 10 + aChar - 'A';      
							break;      
						default:      
							throw new IllegalArgumentException(      
									"Malformed   \\uxxxx   encoding.");      
						}      
					}      
					outBuffer.append((char) value);      
				} else {      
					if (aChar == 't')      
						aChar = '\t';      
					else if (aChar == 'r')      
						aChar = '\r';      
					else if (aChar == 'n')      
						aChar = '\n';      
					else if (aChar == 'f')      
						aChar = '\f';      
					outBuffer.append(aChar);      
				}      

			} else     
				outBuffer.append(aChar);      
		}      
		return outBuffer.toString();      
	}     


最后测试:直接调用get_OrderNumber_ByContact(String contact)方法即可
81EI5[B{_4CF7[ZFQZVK)VG.png
(ps:打包代码里用了多线程,105发卡网站加了安全狗,短时间内多次访问会ban  IP,自己测试)

spider.zip (2.28 KB, 下载次数: 167)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lin_xop + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| liubenqiang 发表于 2017-3-10 20:06
wanglaihuai 发表于 2017-3-10 19:28
好厉害的样子,发卡平台到现在还没升级么···不长记性。

有的升级了有的没升级。升级无非是限制IP搜索次数或者加上验证码,都有相应的对策
yzc11111 发表于 2017-8-28 20:41
liubenqiang 发表于 2017-8-28 11:40
导入部分jar包就行了,不知道现在还能不能用,好久没看了

那 大佬 太深奥了 能教教我吗 我是新手 用哪些 然后写成什么.exe 吗
mzussle 发表于 2017-3-10 18:49
520wangshun 发表于 2017-3-10 18:57
搞来学习一下
wanglaihuai 发表于 2017-3-10 19:28
好厉害的样子,发卡平台到现在还没升级么···不长记性。
woaidky 发表于 2017-3-10 19:58
感谢分享! 学习一下
你不配丶 发表于 2017-3-10 20:09
老哥666,学习一下
lan2602144404 发表于 2017-3-10 20:37
这个有用吗,谢谢分享
lan2602144404 发表于 2017-3-10 20:40
链接挂了
woai412891910 发表于 2017-3-10 21:27
老哥稳啊!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 01:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表