最近大家一直在关注滴滴的相关消息,相信大家或多或少都有了解。一方面是大家发现打车现在已经离不开滴滴,滴滴的影响力已经不知不觉超乎我们的预期;另一方面就是比较敏感的用户网络隐私安全。滴滴作为目前国内领头的打车服务提供商,对中国互联网业务延伸拓宽是有积极作用的,这一点毋庸置疑,但是随着影响力加大,市场垄断、信息不规范获取的问题也突显出来。
和pc 端数据一样,移动端的数据也是可以抓取的,那么App数据好抓取吗?只要是数据获取肯定有难有易的。对于app数据来说,简单的就是app的数据比web端数据更容易抓取,基本都是http、https协议,返回的数据格式也相对规整。那困难的也是真的很困难,需要掌握的技能比较多,比如app逆向、app脱壳、破解加密等。app抓取和网页一样也是会需要反爬的,所以基本的加代理,研究反爬策略也是必须的。
部分抓取app代码分享:
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import java.io.IOException;
public class Main {
# 代理服务器(产品官网 www.16yun.cn)
private static final String PROXY_HOST = "t.16yun.cn";
private static final int PROXY_PORT = 31111;
public static void main(String[] args) {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("https://www.xiaohongshu.com/");
HostConfiguration config = client.getHostConfiguration();
config.setProxy(PROXY_HOST, PROXY_PORT);
client.getParams().setAuthenticationPreemptive(true);
String username = "16ABCCKJ";
String password = "712323";
Credentials credentials = new UsernamePasswordCredentials(username, password);
AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);
client.getState().setProxyCredentials(authScope, credentials);
try {
client.executeMethod(method);
if (method.getStatusCode() == HttpStatus.SC_OK) {
String response = method.getResponseBodyAsString();
System.out.println("Response = " + response);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
method.releaseConnection();
}
}
`}`
通过以上示例我们可以抓取App中流经的网络数据包,捕获原始的数据,如果我们可以分析得到请求的URL和参数的规律,直接用程序模拟即可批量抓取,这当然最好不过了。但是随着技术的发展,App接口往往会带有密钥,我们并不能直接找到这些规律,所以我们需要学习更多的技术。