油猴腳本以及js爬蟲應(yīng)用

在以往的XmlHttprequest對象中想要跨域請求基本上就是靠jsonp之斯,油猴腳本可以實現(xiàn)自定義網(wǎng)頁腳本光涂,但是他同樣無法避免的要被CORS阻止庞萍。

如何使用 @grant注解 實現(xiàn)使用油猴自帶的GM_xmlhttpRequest發(fā)送跨域請求?

通常新建一個腳本之后是這樣的:
符號 // 不是代表注釋

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        url
// @grant        none
// ==/UserScript==
/* jshint -W097 */
'use strict';

// Your code here...

@grant可以使用一些加強函數(shù)這些函數(shù)都是以GM_開頭的。
如果@grant是none的話就只能使用GM_info這個函數(shù)了忘闻。

之后我們的代碼中就可以使用GM_xmlhttpRequest函數(shù)了

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.uuuuuu.com/mdeditor
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// ==/UserScript==
/* jshint -W097 */
'use strict';
GM_xmlhttpRequest({
  method: "GET",
  url: "http://www.qq.com/",
  onload: function(response) {
     //這里寫處理函數(shù)
  }
});

處理這些屬性之外還有一些其他的屬性:

url - the URL from where the data should be downloaded
name - thefilename - for security reasons the file extension needs to bewhitelisted at the Tampermonkey options page
headers - seeGM_xmlhttpRequest for more details saveAs - boolean value, show asaveAs dialog
onload - function() {} - callback function that iscalled when the download has finished
onerror - function(download) {}
callback function that is called when there was an error

下面給出一個通過js爬取某個網(wǎng)站信息的例子:

jquery 中 ('div','li')表示的是(子钝计,父),即從父節(jié)點里尋找子節(jié)點,是選擇li標簽里面所有div標簽私恬,而不是找li標簽外面的div標簽债沮。
比如:

var el = $( '<div></div>' );
el.html(data);
var tda= $("div.content div.header a.name em", el)  ;
var detailUrl = $("div.content div.header a.name ", el)  ;                          

完整例子,只是demo

// ==UserScript==
// @name         爬取
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  爬取
// @author       bob
// @match        https://www.txxxxxx.com/search*
// @requir       https://code.jquery.com/jquery-latest.js
// @require      https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @run-at       document-idle
// @grant        GM_xmlhttpRequest
// ==/UserScript==

 (function () {
      'use strict';
     var $ = $ || window.$;
     function sleep(numberMillis) {
         var now = new Date();
         var exitTime = now.getTime() + numberMillis;
         while (true) {
             now = new Date();
             if (now.getTime() > exitTime)
                 return;
         }
     }
     var enterpriseList = [ ];
     var dataList = [];
     var errorListIds = [];
     //獲取企業(yè)列表
     GM_xmlhttpRequest({
        method: 'GET',
        url: "http://xxx.xxxxxx.com/yyyyyy/queryEnterpriseList?startID=44633&endID=45000",
        headers: {
                 "Content-Type": "application/json"
             },
        onload: function(response) {
            enterpriseList =  $.parseJSON( response.responseText );
            getData();
        },
    });

     //saveData(data);
     var count = 0;
     function saveData(data){
         GM_xmlhttpRequest({
             method: 'POST',
             data:JSON.stringify(data),
             url: "http://xxx.xxxxx.com/yyyyyy/saveDataList",
             dataType: "json",
             headers: {
                 "Content-Type": "application/json"
             },
             onload: function(response) {
                 
             },
         });
     }

   
     function getData(){
         for(var i=0;i<enterpriseList.length;i++){//
             var one = {};
             var url =  'https://www.uuuuuuuuu.com/search?key='+enterpriseList[i].enterpriseName.replace("(","(").replace(")",')');
             try{
                 var num=Math.floor(Math.random()*10+5);//隨機等待幾秒
                  sleep(num*1000);
                 $.ajax({url:url,
                         async:false,
                         // timeout:5000,
                         success:function(data){
                             var str = "index_verify?type=companysearch"
                             if(data.indexOf(str) != -1){
                                 i = enterpriseList.length;
                                 console.log('****************************************操作需要驗證');
                             }

                             var el = $( '<div></div>' );
                             el.html(data);
                             var tda= $("div.content div.header a.name em", el)  ;
                             var detailUrl = $("div.content div.header a.name ", el)  ;

                             if(tda.length >0 && tda[0].innerText == enterpriseList[i].enterpriseName){
                                 $.ajax({url:detailUrl[0].href,
                                         async:false,
                                         // timeout:5000,
                                         success:function(data){
                                             var el = $( '<div></div>' );
                                             el.html(data);

                                             one.enterpriseName = enterpriseList[i].enterpriseName  ;//公司名稱

                                             var tr = $("#_container_baseInfo table.table.-striped-col.-border-top-none tr", el);
                                             if(businessTerm.length>8){
                                                     if(businessTerm.substring(0,3) != '***'){
                                                         one.startTime = businessTerm.substring(0,9)  ;
                                                         if(businessTerm.substr(11) == '無固定期限'){
                                                             one.endTime = '2099-12-31';
                                                         }else{
                                                             one.endTime = businessTerm.substr(11);
                                                         }
                                             }else{
                                                         one.startTime = td[12].innerText.replace(/\s+/g,"").replace(/[\n\r]/g,'')  ;
                                                         if(businessTerm.substr(4) == '無固定期限'){
                                                             one.endTime = '2099-12-31';
                                                         }else{
                                                             one.endTime = businessTerm.substr(4);
                                                         }
                                                     }
                                             }
                                        }, error:function(data){}});
                             }else{
                one.qualificationNo = '--';
                 }
                 dataList.push(one);
                             if(dataList.length == 10){
                                   saveData(dataList);//保存數(shù)據(jù)
                                   dataList = [];
                                   count += 10;
                                   console.log('已保存數(shù)據(jù):'+count);
                              }
                         }, error:function(data){ }});
             }catch(e){
             }
         }
     }
 })();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本鸣,一起剝皮案震驚了整個濱河市疫衩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荣德,老刑警劉巖闷煤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涮瞻,居然都是意外死亡鲤拿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門署咽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來近顷,“玉大人,你說我怎么就攤上這事宁否≈仙” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵慕匠,是天一觀的道長饱须。 經(jīng)常有香客問我,道長絮重,這世上最難降的妖魔是什么冤寿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮青伤,結(jié)果婚禮上督怜,老公的妹妹穿的比我還像新娘。我一直安慰自己狠角,他們只是感情好号杠,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丰歌,像睡著了一般姨蟋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上立帖,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天眼溶,我揣著相機與錄音,去河邊找鬼晓勇。 笑死堂飞,一個胖子當著我的面吹牛灌旧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绰筛,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼枢泰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铝噩?” 一聲冷哼從身側(cè)響起衡蚂,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骏庸,沒想到半個月后毛甲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡具被,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年丽啡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硬猫。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖改执,靈堂內(nèi)的尸體忽然破棺而出啸蜜,到底是詐尸還是另有隱情,我是刑警寧澤辈挂,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布衬横,位于F島的核電站,受9級特大地震影響终蒂,放射性物質(zhì)發(fā)生泄漏蜂林。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一拇泣、第九天 我趴在偏房一處隱蔽的房頂上張望噪叙。 院中可真熱鬧,春花似錦霉翔、人聲如沸睁蕾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽子眶。三九已至,卻和暖如春序芦,著一層夾襖步出監(jiān)牢的瞬間臭杰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工谚中, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渴杆,地道東北人寥枝。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像将塑,于是被迫代替她去往敵國和親脉顿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353