├── README.md
├── pom.xml
└── src
├── main
├── java
│ └── org
│ │ └── bianqi
│ │ ├── enter
│ │ ├── bean
│ │ │ └── QQBean.java
│ │ ├── code
│ │ │ └── VerifyCode.java
│ │ ├── encrypt
│ │ │ └── QzoneEncrypt.java
│ │ ├── key
│ │ │ ├── GetQQByProperties.java
│ │ │ └── KeyWord.java
│ │ ├── login
│ │ │ ├── InputNameAndPwd.java
│ │ │ └── Login.java
│ │ └── sig
│ │ │ └── SigInterface.java
│ │ └── getdata
│ │ ├── GetMsgBoard.java
│ │ ├── GetQNum.java
│ │ └── GetShuoShuoData.java
└── resources
│ ├── entry.js
│ ├── login.js
│ └── num.properties
└── test
├── java
└── qzone_enter
│ ├── GetMsgBord.java
│ ├── GetMyShuoShuo.java
│ ├── GetQNumTest.java
│ ├── GetQQTest.java
│ ├── LoginTest.java
│ ├── NoInputLogin.java
│ └── TestEntryptg_k.java
└── resources
└── zone.js
/README.md:
--------------------------------------------------------------------------------
1 | # Qzone
2 | 1. num.properties中输入用户名密码 至少10个QQ号码
3 | 2. D盘新建文件夹out
4 | 4. 找到GetMyShuoShuo.java i 开始抓取的QQ号 j 结束的QQ号
5 | 3. 找到getMyShuoshuo.java main方法启动 即可开始抓取说说数据
6 | 注 :抓取到的数据均为json数据每一个用户保存为一个文件(都是每一个人的第一页的说说)
7 | ***就目前来说速度提升了不少 没有加入多线程技术***
8 | ***只可以用于学习交流,切勿用于非法买卖,一切后果自负***
9 | ***100W从10001开始到1000000 QQ空间首页JSON数据***
10 | 链接:http://pan.baidu.com/s/1miIFol6 密码:89z6
11 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | org.bianqi.qzone
4 | qzone
5 | 0.0.1-SNAPSHOT
6 |
7 |
8 |
9 | org.jsoup
10 | jsoup
11 | 1.8.2
12 |
13 |
14 |
15 | junit
16 | junit
17 | 4.12
18 |
19 |
20 |
21 |
22 |
23 |
24 | org.apache.maven.plugins
25 | maven-compiler-plugin
26 | 3.2
27 |
28 | 1.8
29 | 1.8
30 | UTF-8
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/main/java/org/bianqi/enter/bean/QQBean.java:
--------------------------------------------------------------------------------
1 | package org.bianqi.enter.bean;
2 |
3 | import java.io.Serializable;
4 | /**
5 | *
6 | *
Title: QQBean
7 | * Description:
8 | * School: qiqihar university
9 | * @author BQ
10 | * @date 2017年7月15日下午1:52:34
11 | * @version 1.0
12 | */
13 | public class QQBean implements Serializable{
14 | private String num;
15 | private String pwd;
16 | public String getNum() {
17 | return num;
18 | }
19 | public void setNum(String num) {
20 | this.num = num;
21 | }
22 | public String getPwd() {
23 | return pwd;
24 | }
25 | public void setPwd(String pwd) {
26 | this.pwd = pwd;
27 | }
28 | @Override
29 | public String toString() {
30 | return "QQBean [num=" + num + ", pwd=" + pwd + "]";
31 | }
32 | public QQBean() {
33 | super();
34 | }
35 | public QQBean(String num, String pwd) {
36 | super();
37 | this.num = num;
38 | this.pwd = pwd;
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/org/bianqi/enter/code/VerifyCode.java:
--------------------------------------------------------------------------------
1 | package org.bianqi.enter.code;
2 |
3 | import java.io.File;
4 | import java.io.FileOutputStream;
5 | import java.io.IOException;
6 | import java.util.HashMap;
7 | import java.util.Map;
8 | import java.util.Map.Entry;
9 | import java.util.Set;
10 |
11 | import org.jsoup.Connection.Response;
12 | import org.jsoup.Jsoup;
13 |
14 | /**
15 | *
16 | * Title: VerifyCode
17 | * Description:
18 | * School: qiqihar university
19 | * @author BQ
20 | * @date 2017年6月21日下午6:15:51
21 | * @version 1.0
22 | */
23 | public class VerifyCode {
24 |
25 | public static Map cookies = new HashMap<>();
26 | /**
27 | * 保存验证码图片
28 | * Title: getVerifyCode
29 | * Description:
30 | * @param uin
31 | * @param sig
32 | * @throws IOException
33 | */
34 | public static void getVerifyCode(String uin, String sig) throws IOException {
35 | Response imgResponse = Jsoup
36 | .connect("http://captcha.qq.com/getimgbysig?" + "uin=" + uin + "&aid=549000912" + "&sig=" + sig)
37 | .ignoreContentType(true).execute();
38 | File imge = new File("VerifyCode.jpg");
39 | FileOutputStream out = new FileOutputStream(imge);
40 | out.write(imgResponse.bodyAsBytes());
41 | out.close();
42 | }
43 |
44 | /**
45 | * 得到sessionCode
46 | * Title: getVerifysession
47 | * Description:
48 | * @param uin
49 | * @param verifycode
50 | * @param sig
51 | * @return
52 | * @throws IOException
53 | */
54 | public static String getVerifysession(String uin, String verifycode, String sig) throws IOException {
55 | Response response = Jsoup.connect("http://captcha.qq.com/cap_union_verify?" +
56 | "aid=539400912" +
57 | "&uin=" + uin +
58 | "&captype=50" +
59 | "&ans=" + verifycode +
60 | "&sig=" + sig +
61 | "&0.49537726398709714")
62 | .execute();
63 | return response.body();
64 | }
65 |
66 | /**
67 | *
68 | * Title: check
69 | * Description:
70 | * @param uin
71 | * @return
72 | * @throws IOException
73 | */
74 | public static String check(String uin) throws IOException {
75 | Response response = Jsoup.connect("http://check.ptlogin2.qq.com/check?" +
76 | "regmaster=" +
77 | "&pt_tea=1" +
78 | "&pt_vcode=1" +
79 | "&uin=" + uin +
80 | "&appid=549000912" +
81 | "&js_ver=10140" +
82 | "&js_type=1" +
83 | "&login_sig=" +
84 | "&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone" +
85 | "&r=0.6051182341306292")
86 | .ignoreContentType(true)
87 | .execute();
88 | cookies = response.cookies();
89 | return response.body();
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/src/main/java/org/bianqi/enter/encrypt/QzoneEncrypt.java:
--------------------------------------------------------------------------------
1 | package org.bianqi.enter.encrypt;
2 |
3 | import java.io.FileReader;
4 |
5 | import javax.script.Invocable;
6 | import javax.script.ScriptEngine;
7 | import javax.script.ScriptEngineManager;
8 | /**
9 | * 空间加密密码
10 | * 调用JS脚本加密密码
11 | * Title: QzoneEncrypt
12 | * Description:
13 | * School: qiqihar university
14 | * @author BQ
15 | * @date 2017年6月21日下午5:56:11
16 | * @version 1.0
17 | */
18 | public class QzoneEncrypt {
19 |
20 | /**
21 | * 加密QQ空间的密码
22 | * @param uin 用户的QQ号码
23 | * @param password 加密前的密码
24 | * @param verifycode 验证码(非手动添加的验证码)
25 | * @return
26 | */
27 | public static String encryptPassword(String uin,String password,String verifycode){
28 | String result = "";
29 | try{
30 | String path = QzoneEncrypt.class.getClassLoader().getResource("login.js").getPath();
31 | FileReader fr = new FileReader(path);
32 | ScriptEngineManager sem = new ScriptEngineManager();
33 | ScriptEngine engine = sem.getEngineByName("js");
34 | engine.eval(fr);
35 | Invocable inv = (Invocable)engine;
36 | result = inv.invokeFunction("getEncryption", password,uin,verifycode).toString();
37 | }catch(Exception e){
38 | e.printStackTrace();
39 | }
40 | return result;
41 | }
42 |
43 | /**
44 | * 加密g_tk
45 | * Title: encryptg_k
46 | * Description:
47 | * @param key
48 | * @return
49 | */
50 | public static String encryptg_k(String key){
51 | String result = "";
52 | try{
53 | String path = QzoneEncrypt.class.getClassLoader().getResource("entry.js").getPath();
54 | FileReader fr = new FileReader(path);
55 | ScriptEngineManager sem = new ScriptEngineManager();
56 | ScriptEngine engine = sem.getEngineByName("js");
57 | engine.eval(fr);
58 | Invocable inv = (Invocable)engine;
59 | result = inv.invokeFunction("getACSRFToken",key).toString();
60 | }catch(Exception e){
61 | e.printStackTrace();
62 | }
63 | return result;
64 | }
65 |
66 |
67 | }
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/src/main/java/org/bianqi/enter/key/GetQQByProperties.java:
--------------------------------------------------------------------------------
1 | package org.bianqi.enter.key;
2 |
3 | import java.io.IOException;
4 | import java.io.InputStream;
5 | import java.util.ArrayList;
6 | import java.util.List;
7 | import java.util.Map.Entry;
8 | import java.util.Properties;
9 | import java.util.Set;
10 |
11 | import org.bianqi.enter.bean.QQBean;
12 |
13 | import qzone_enter.GetQQTest;
14 | /**
15 | * 从配置文件中获取QQ号和密码
16 | * Title: GetQQByProperties
17 | * Description:
18 | * School: qiqihar university
19 | * @author BQ
20 | * @date 2017年7月15日下午1:56:05
21 | * @version 1.0
22 | */
23 | public class GetQQByProperties {
24 |
25 | public static List getQQNumAndPwd() throws IOException{
26 | Properties properties = new Properties();
27 | InputStream resourceAsStream = GetQQTest.class.getClassLoader().getResourceAsStream("num.properties");
28 | properties.load(resourceAsStream);
29 | List qqList = new ArrayList<>();
30 | Set> entrySet = properties.entrySet();
31 | for (Entry