由于一些巨大的困难,一些后端爬虫改成了前端爬虫。

前端爬虫是只有js语言,后端爬虫有python java nodejs php这些语言。

前端爬虫有window.document对象,在浏览器端的爬虫即使是二次发送ajax,也不需要学后端爬虫来构造一堆请求头,特别是困难的cookie token。最为重要的还是天然的突破了ip限制。

提取个人信息,直接使用页面渲染后的结构:

/**
* Created by xy49476 on 2018/1/9.
*/ /*
* http://iservice.10010.com/e4/index_server.html
* 提取个人信息
* */ function extractPersonalInfomation() {
var loginName = document.querySelector('#personalInfo td').innerText;
var userLevel = document.querySelector('#font').innerText;
var userName = document.querySelector('div.data_basic_c.ly_gr_zl > dl:nth-child(1) > dd').innerText;
var sex = document.querySelector('div.data_basic_c.ly_gr_zl > dl:nth-child(3) > dd').innerText;
var idNo = document.querySelector('div.data_basic_c.ly_gr_zl > dl:nth-child(5) > dd').innerText;
var contactPhone = document.querySelector('div.data_basic_c.ly_gr_zl > dl:nth-child(9) > dd').innerText;
var contactAddress = document.querySelector('div.data_basic_c.ly_gr_zl > dl:nth-child(11) > dd').innerText; var package = document.querySelector('#packageInfocontext > div.add_main > div > dl:nth-child(1) > dd').innerText;
var chargeType = document.querySelector('#packageInfocontext > div.add_main > div > dl:nth-child(3) > dd').innerText; var currentStatus = document.querySelector('#numberContext > div.data_basic_c2 > div.data_basic_c2_l > dl:nth-child(1) > dd').innerText;
var netInDate = document.querySelector('#numberContext > div.data_basic_c2 > div.data_basic_c2_r > dl:nth-child(1) > dd').innerText;
var billingAccount = document.querySelector('#numberContext > div.data_basic_c2 > div.data_basic_c2_l > dl:nth-child(3) > dd').innerText;
var brand = document.querySelector('#numberContext > div.data_basic_c2 > div.data_basic_c2_r > dl:nth-child(2) > dd').innerText;
var communicatelevel = document.querySelector('#numberContext > div.data_basic_c2 > div.data_basic_c2_l > dl:nth-child(4) > dd').innerText;
var pukCode = document.querySelector('#numberContext > div.data_basic_c2 > div.data_basic_c2_r > dl:nth-child(3) > dd').innerText; var contractName = document.querySelector('#contractPeriod > div.ly_gr_l2 > dl:nth-child(1) > dd').innerText;
var effectiveTime = document.querySelector('#contractPeriod > div.ly_gr_l2 > dl:nth-child(3) > dd').innerText;
var uneffectiveTime = document.querySelector('#contractPeriod > div.ly_gr_l2 > dl:nth-child(5) > dd').innerText; personalObj = {loginName:loginName,
userLevel:userLevel,
userName:userName,
sex:sex,
idNo:idNo,
contactPhone:contactPhone,
contactAddress:contactAddress, package:package,
chargeType:chargeType, currentStatus:currentStatus,
netInDate:netInDate,
billingAccount:billingAccount,
brand:brand,
communicatelevel:communicatelevel,
pukCode:pukCode, contractName:contractName,
effectiveTime:effectiveTime,
uneffectiveTime:uneffectiveTime
}; return '{"personalInfo":' + JSON.stringify(personalObj) + '}'; } //extractPersonalInfomation();

提取通话记录,这里和上面不同,发送了ajax来获取json,按月份按分页获取通话记录:

/**
* Created by xy49476 on 2018/1/10.
*/
/*http://iservice.10010.com/e4/query/bill/call_dan-iframe.html?menuCode=000100030001
提取通话记录
*
* */ function extractCallRecordsOuter() { function getNear6Montgh(){
var near6MonthArray = []; for (var i=0;i<6;i++){
var d = new Date();
d.setMonth(d.getMonth() - i);
var yy1 = d.getFullYear();
var mm1 = d.getMonth() + 1;//因为getMonth()返回值是 0(一月) 到 11(十二月) 之间的一个整数。所以要给其加1
var dd1 = d.getDate();
// if (mm1 < 10) {
// mm1 = '0' + mm1;
// }
if (dd1 < 10) {
dd1 = '0' + dd1;
}
console.info(yy1 + '-' + mm1 + '-' + dd1);
near6MonthArray.push([yy1,mm1]);
}
return near6MonthArray;
} //按照年月,获取一个月有多少天 mGetDate(2004,2)
function mGetDate(year, month){
var d = new Date(year, month, 0);
return d.getDate();
} var callRecordsArray = [];
function extractCallRecords() { //历史账单
var near6MonthArray = getNear6Montgh();
for (i of near6MonthArray) {
var dates = mGetDate(i[0], i[1]);
var mm1 = i[1];
if (mm1 < 10) {
mm1 = '0' + mm1;
}
var yearMonth = i[0] + '' + mm1; var callRecordsObj = {};
callRecordsObj.pagelist = [];
callRecordsObj.yearMonth = yearMonth; function extractCallRecordByPage(page) {
var page = page || 1; var url = 'http://iservice.10010.com/e3/static/query/callDetail?_=1515561593328&accessURL=http://iservice.10010.com/e4/query/bill/call_dan-iframe.html?menuCode=000100030001&menuid=000100030001';
var data = {
pageNo: page,
pageSize: 200,
beginDate: yearMonth + '01',
endDate: yearMonth + dates
};
console.debug(data);
var htmlObj = $.ajax({
type: 'POST',
url: url,
data: data,
async: false //一定要设置这个,否则异步的还没得到返回结果就执行到下面去了,代码 一定会报错
});
var htmlStr = htmlObj.responseText;
console.debug('htmlStr:',htmlStr);
var callRecordsRawObj = JSON.parse(htmlStr);
callRecordsObj.pagelist = callRecordsObj.pagelist.concat(callRecordsRawObj.pagelist);
var totalpage = callRecordsRawObj.totalpage;
if (page < totalpage) {
extractCallRecordByPage(page + 1); //回调自己
}
} extractCallRecordByPage();
callRecordsArray.push(callRecordsObj);
}
callRecordsInfoObj = {
callRecordsInfo:callRecordsArray
};
return JSON.stringify(callRecordsInfoObj); } return extractCallRecords();
}
//extractCallRecordsOuter();

  

为了一个脚本一个函数,在最外层套了一个函数。

有没有很像js闭包,但这不是闭包。

最后三行是

    return extractCallRecords();
}
extractCallRecordsOuter(); 如果改成下面,
 return extractCallRecords;
}
extractCallRecordsOuter()();

这样就是js之闭包了。

前端爬虫时候,使用jqury选择器或者document的queryselector方法就能使用css3选择器的语法了。比getElementByxx能更精确的提取某些元素。

使用jquery时候,如果被爬页面没有引入jquery库,需要先在document注入jquery地址或者完整的执行一遍jquery代码。

javascript提取联通个人信息和通话记录的代码的更多相关文章

  1. 越狱的 ios 如何 获取 读取 提取 手机上的 短信 通话记录 联系人 等信息

    http://willson.sinaapp.com/2011/12/iphone 获取短信脚本.html  Iphone获取短信脚本http://bbs.9ria.com/thread-209349 ...

  2. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息

    项目的Github地址:https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了 ...

  3. 【爬虫问题】爬取tv.sohu.com的页面, 提取视频相关信息

    尝试解决下面的问题 问题: 爬取tv.sohu.com的页面, 提取视频相关信息,不可用爬虫框架完成 何为视频i关信息?属性有哪些? 需求: 做到最大可能的页面覆盖率 *使用httpClient 模拟 ...

  4. 内容观察者 ContentObserver 监听短信、通话记录数据库 挂断来电

    Activity public class MainActivity extends ListActivity {     private TextView tv_info;     private  ...

  5. 建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS)

    建立一个类似于天眼的Android应用程序:第4部分 - 持久收集联系人,通话记录和短信(SMS) 电话黑客android恶意软件编程黑客入侵linux 随着我们继续我们的系列,AMUNET应用程序变 ...

  6. Android通讯录管理(获取联系人、通话记录、短信消息)

    前言:前阵子主要是记录了如何对联系人的一些操作,比如搜索,全选.反选和删除等在实际开发中可能需要实现的功能,本篇博客是小巫从一个别人开源的一个项目抽取出来的部分内容,把它给简化出来,可以让需要的朋友清 ...

  7. 通过查询数据库中的数据匹配在页面上:(set单条数据属性是在页面上的显示与foreach的不同) 通过ID修改提取位置表信息

    ACTION   OpenModifyExtractPositionById // set单条数据属性 /* * 通过ID修改提取位置表信息 */ public String OpenModifyEx ...

  8. 个人永久性免费-Excel催化剂功能第55波-Excel批注相关的批量删除作者、提取所有批注信息等

    Excel里的批注,许多人很喜欢用,但批注真的值得我们大量使用吗?批注的使用场景在哪里?这些问题可能更值得花时间来思考下.同样因为不规范地使用批注,也带出了一大堆的后续擦屁股的事情来,从批注中找回有价 ...

  9. CSipSimple通话记录分组

    为了便于查看通话记录,通常要对通话记录进行分组.本质上来说这没什么难度,只需要用ContentResolver去读数据库,剩下的就是策略问题.代码在com/csipsimple/ui/calllog/ ...

随机推荐

  1. mybatis注解方式批量插入数据

    @Insert("<script>" + "INSERT INTO cms_portal_menu(name,service_type,index_code) ...

  2. Ehcache 缓存监控配置

    监控 ehcache缓存: 1,下载: http://terracotta.org/downloads/open-source/destination?name=ehcache-monitor-kit ...

  3. mac使用nvm安装node进行多版本管理

    安装 $ git clone https://github.com/creationix/nvm.git ~/.nvm $ source ~/.nvm/nvm.sh vi ~/.bash_profil ...

  4. PCL采样一致性算法

    在计算机视觉领域广泛的使用各种不同的采样一致性参数估计算法用于排除错误的样本,样本不同对应的应用不同,例如剔除错误的配准点对,分割出处在模型上的点集,PCL中以随机采样一致性算法(RANSAC)为核心 ...

  5. 如何使用Javascript XSLT 处理XML文件(支持Firefox)

    最近使用Firefox进行网页的调试,发现有些Javascript XSLT处理XML的语句仅仅支持IE浏览器.而网络中的一些介绍javascript XSLT 处理XML的文章基本上都是依据AJAX ...

  6. JS函数重载解决方案

    JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数 ...

  7. FileOutPutStream in 创新实训 自然语言交流系统

    FileOutPutStream在c盘等一级目录下是可以创建文件的,如: new FileOutputStream("c:\\kk.txt");但是在c\\test等就创建不了,F ...

  8. 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

    题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个数然后输入成对的index和value值 ...

  9. (笔记)Linux下的静态库和动态库使用详解

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比 ...

  10. (笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)

    参考了前人的成果,结合自己实践,arm-linux-gcc-4.4.3.tar.gz的下载地址为:http://ishare.iask.sina.com.cn/f/13836544.html?from ...