通过 phantomjs抓取仁医在线的练习题
先模拟登录,再按照指定课程挨个去抓取,还有点不完善,会有重复题目出现。
var page = require('webpage').create(); phantom.outputEncoding = 'gbk'; page.settings.userAgent = 'chrome'; page.onConsoleMessage = function(msg) { console.log(msg); }; function getBetween(targetString, beginString, endString) { if (!targetString) { return targetString; } if (!beginString && !endString) { return targetString; } if (!beginString) { var i = targetString.indexOf(endString); if (i < 0) { return ''; } return targetString.substring(0, i); } else if (!endString) { var i = targetString.indexOf(beginString); if (i < 0) { return ''; } return targetString.substring(i + beginString.length); } else { var i = targetString.indexOf(beginString); if (i < 0) { return null; } var j = targetString.indexOf(endString, i + beginString.length); if (j < 0) { return null; } return targetString.substring(i + beginString.length, j); } } var fs = require('fs'); var entryList = [ 2684,230 ,2685,145 ,2686,235 ,2687,237 ,2688,224 ,2689,117 ,2690,120 ,2691,79 ,2692,80 ,2693,40 ,2694,70 ,2695,80 ,2696,40 ,2697,38 ,2698,90 ]; var sId = 2683; page.open('http://www.renyiwang.net/Mobile/Login.aspx', function(status) { if (status !== 'success') { console.log('Unable to access Login Page, status is ' + status + '!'); phantom.exit(); } else { console.log('success to open Login Page, status is ' + status + '!'); page.evaluate(function() { document.getElementById('TstNumber').value = "用户名"; document.getElementById('TstPassword').value = "密码"; document.getElementById('But_Login').click(); }); setTimeout(function() { var pageHtml = page.evaluate(function() { return document.body.innerHTML; }); if (pageHtml && pageHtml.indexOf("三基培训") > 0) { console.log('success to login'); var captureQuestion = function(entryIndex, qIndex) { qIndex++; page.open('http://www.renyiwang.net/Mobile/Practice.aspx?o_id=6&SelQuesetions='+sId+'&q_id=' + entryList[entryIndex * 2] + '&class=0', function(status){ if (status !== 'success') { console.log('Unable to access Practice Page, status is ' + status + '!'); phantom.exit(); } else { var pageHtml = page.evaluate(function() { //return document.getElementById('app1').innerHTML; return document.body.innerHTML; }); if (pageHtml && pageHtml.indexOf('Rad_T_A_Id') > 0) { //console.log('success to open practice page!'); var answerId = getBetween(pageHtml, 'id="Hid_Answer" value="', '"'); //console.log('answerId: ' + answerId); var questionTitle = getBetween(pageHtml, 'id="Hid_Choose" value="0">', '