整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          使用JavaScript寫爬蟲

          使用JavaScript寫爬蟲

          比Python,JavaScript才是更適合寫爬蟲的語言。原因有如下三個方面:

          • JavaScript異步IO機制適用于爬蟲這種IO密集型任務(wù)。JavaScript中的回調(diào)非常自然,使用異步網(wǎng)絡(luò)請求能夠充分利用CPU。
          • JavaScript中的jQuery毫無疑問是最強悍的HTML解析工具,使用JavaScript寫爬蟲能夠減少學(xué)習(xí)負擔(dān)和記憶負擔(dān)。雖然Python中有PyQuery,但終究還是比不上jQuery自然。
          • 爬取結(jié)果多為JSON,JavaScript是最適合處理JSON的語言。

          一、任務(wù):爬取用戶在Github上的repo信息

          通過實例的方式學(xué)習(xí)爬蟲是最好的方法,先定一個小目標(biāo):爬取github repo信息。入口URL如下,我們只需要一直點擊next按鈕就能夠遍歷到用戶的所有repo。

          https://github.com/{{username}}?tab=repositories

          獲取repo之后,可以做什么?

          • 統(tǒng)計用戶最常使用的語言,統(tǒng)計用戶語言使用分布情況統(tǒng)計用戶所獲取的star數(shù),fork數(shù)

          二、爬蟲雙股劍:axios和jQuery

          axios是JavaScript中很常用的異步網(wǎng)絡(luò)請求庫,相比jQuery,它更輕量、更專業(yè)。既能夠用于瀏覽器端,也可以用于Node。它的語法風(fēng)格是promise形式的。在本任務(wù)中,只需要了解如下用法就足夠了:

          axios.get(url).then((resp)=> {
           請求成功,處理resp.data中的html數(shù)據(jù)
          }).catch((err)=> {
           請求失敗,錯誤處理
          })
          

          請求之后需要處理回復(fù)結(jié)果,處理回復(fù)結(jié)果的庫當(dāng)然是用jQuery。實際上,我們有更好的選擇:cheerio。

          在node下,使用jQuery,需要使用jsdom庫模擬一個window對象,這種方法效率較低,四個字形容就是:笨重穩(wěn)妥。

          如下代碼使用jQuery解析haha.html文件

          fs=require("fs")
          jquery=require('jquery')
          jsdom=require('jsdom') //fs.readFileSync()返回結(jié)果是一個buffer,相當(dāng)于byte[] 
          html=fs.readFileSync('haha.html').toString('utf8') 
          dom=new jsdom.JSDOM(html) 
          $=jquery(dom.window) console.log($('h1'))
          

          cheerio只實現(xiàn)了jQuery中的DOM部分,相當(dāng)于jQuery的一個子集。cheerio的語法和jQuery完全一致,在使用cheerio時,幾乎感覺不到它和jQuery的差異。在解析HTML方面,毫無疑問,cheerio是更好的選擇。如下代碼使用cheerio解析haha.html文件。

          cheerio=require('cheerio')
          html=require('fs').readFileSync("haha.html").toString('utf8')
          $=cheerio.load(html)
          console.log($('h1'))
          

          只需20余行,便可實現(xiàn)簡單的github爬蟲,此爬蟲只爬取了一頁repo列表。

          var axios=require("axios")
          var cheerio=require("cheerio")
          axios.get("https://github.com/weiyinfu?tab=repositories").then(resp=> {
           var $=cheerio.load(resp.data)
           var lis=$("#user-repositories-list li")
           var repos=[]
           for (var i=0; i < lis.length; i++) {
           var li=lis.eq(i)
           var repo={
           repoName: li.find("h3").text().trim(),
           repoUrl: li.find("h3 a").attr("href").trim(),
           repoDesc: li.find("p").text().trim(),
           language: li.find("[itemprop=programmingLanguage]").text().trim(),
           star: li.find(".muted-link.mr-3").eq(0).text().trim(),
           fork: li.find(".muted-link.mr-3").eq(1).text().trim(),
           forkedFrom: li.find(".f6.text-gray.mb-1 a").text().trim()
           }
           repos.push(repo)
           }
           console.log(repos)
          })
          

          三、更豐富的功能

          爬蟲不是目的,而是達成目的的一種手段。獲取數(shù)據(jù)也不是目的,從數(shù)據(jù)中提取統(tǒng)計信息并呈現(xiàn)給人才是最終目的。

          在github爬蟲的基礎(chǔ)上,我們可以擴展出更加豐富的功能:使用echarts等圖表展示結(jié)果。

          要想讓更多人使用此爬蟲工具獲取自己的github統(tǒng)計信息,就需要將做成一個網(wǎng)站的形式,通過搜索頁面輸入用戶名,啟動爬蟲立即爬取github信息,然后使用echarts進行統(tǒng)計展示。網(wǎng)站肯定也要用js作為后端,這樣才能和js爬蟲無縫銜接,不然還要考慮跨語言調(diào)用。js后端有兩大web框架express和koa,二者API非常相似,并無優(yōu)劣之分,但express更加流行。

          如上設(shè)計有一處用戶體驗不佳的地方:當(dāng)啟動爬蟲爬取github信息時,用戶可能需要等待好幾秒,這個過程不能讓用戶干等著。一種解決思路是:讓用戶看到爬蟲爬取的進度或者爬取過程。可以通過websocket向用戶推送爬取過程信息并在前端進行展示。展示時,使用類似控制臺的界面進行展示。

          如何存儲爬取到的數(shù)據(jù)呢?使用MongoDB或者文件都可以,最好實現(xiàn)兩種存儲方式,讓系統(tǒng)的存儲方式變得可配置。使用MongoDB時,用到j(luò)s中的連接池框架generic-pool。

          整個項目用到的庫包括:

          • express:后端框架
          • cheerio+axios:爬蟲
          • ws:websocket展示爬取過程
          • webpack:打包工具
          • less:樣式語言
          • echarts:圖表展示
          • vue:模板渲染
          • jquery:DOM操作
          • mongodb:存儲數(shù)據(jù)
          • generic-pool:數(shù)據(jù)庫連接池

          試用地址:

          https://weiyinfu.cn/githubstatistic/search.html?

          案例地址:https://github.com/weiyinfu/GithubStatistic

          原文鏈接:https://zhuanlan.zhihu.com/p/53763115

          剛,記者從杭州市發(fā)改委獲悉,2022年春節(jié)期間留杭省外員工電子消費券申報工作,將于明天(1月18日)8:00開始,至1月24日21:00截止;異議處理申請于1月25日12:00截止。

          申報通道根據(jù)員工參保情況,分為2個:

          用人單位申報:職工社保或工程建設(shè)項目工傷保險的參保人員,由用人單位通過PC端在“親清在線”平臺申報。

          靈活就業(yè)個人申報:靈活就業(yè)參保人員由個人通過手機端在浙里辦APP“親清在線”應(yīng)用申報。

          具體怎么申報?一起來看!

          1.登錄親清在線

          路徑1:在“浙江省政務(wù)服務(wù)網(wǎng)”(https://www.zjzwfw.gov.cn)首頁“親清在線”欄目進入;

          路徑二:瀏覽器直接訪問https://qinqing.hangzhou.gov.cn,進入親清在線。

          打開“親清在線”首頁,在右上角按【登錄】,選擇【法人登錄】,使用浙江政務(wù)網(wǎng)高級實名認(rèn)證賬號、法人數(shù)字證書、電子營業(yè)執(zhí)照等方式登錄。

          2.進入政策

          登錄后,在“惠企政策”頁,找到置頂政策“春節(jié)期間留杭省外員工電子消費券發(fā)放”,點擊【兌現(xiàn)】。

          如跳出“賬號等級不夠或未授權(quán)”提示框,說明當(dāng)前賬號不符合申報要求,請根據(jù)提示提升賬號等級或由更高賬號進行授權(quán)操作。

          3.查閱政策

          進入政策后可查閱政策內(nèi)容,點擊【申報】進入政策申報頁面。

          以下申報單位將無法進入申報頁面,如與事實不符可聯(lián)系親清D小二:

          ①申報單位是國企、事業(yè)單位和非杭州企業(yè);

          ②申報單位無法判斷是否在杭(企業(yè)、個體工商戶、社會組織);

          ③申報單位未在杭納稅。

          4.政策申報

          第一步:確認(rèn)企業(yè)信息無誤后,可直接添加申領(lǐng)補貼的員工。

          添加員工支持單條錄入和批量錄入兩種方式:

          ①單條錄入:點擊【添加員工】進行添加。【員工姓名】框支持使用姓名模糊查詢滿足參保和非浙條件的參保員工信息,選中后將自動補全對應(yīng)信息,填報人員補充員工手機號即可完成填報;也可直接手動錄入員工信息。

          ②批量錄入:【下載待申報數(shù)據(jù)】Excel電子表格(名單中包含滿足參保和非浙條件的員工信息),根據(jù)員工留杭情況對表格人員進行增刪處理,并補充員工手機號碼。確保表格內(nèi)只保留需申報的員工信息,點擊【批量導(dǎo)入】上傳表格。(批量導(dǎo)入數(shù)據(jù)單次最大支持200條,支持連續(xù)上傳多個表格)

          添加成功后,員工將展示在下方申報列表中。

          注:個人證件類型支持以下幾種,填報須使用與繳納社保時使用的證件類型一致,否則存在社保無記錄的問題:

          (1)身份證;

          (2)護照;

          (3)其他:含港澳臺居民來往內(nèi)地通行證、港澳臺居民居住證、外國人永久居留證、護照等

          第二步:在申報列表勾選員工,點擊【閱讀并簽署《承諾函》】。

          第三步:點擊頁面上方的【提交兌現(xiàn)】,即完成申報操作。

          5.申報記錄查看

          點擊【兌現(xiàn)記錄】,可查看申報記錄的進度及狀態(tài)。

          6.申報成功

          申報單狀態(tài)為“申報成功”,即表示該員工已通過審核。員工會收到通過審核的短信通知。

          ***,感謝您積極響應(yīng)杭州市委市政府的倡議,將最好的時光留在杭州。請您于1月28日-2月6日期間,使用尾號“***”的證件號碼實名登錄“云閃付”APP領(lǐng)取新春留杭消費券(下載APP:app.95516.com;操作說明:https://article.95516.com/eq/ls/H9aryasG.html)。“親清在線”預(yù)祝您在杭州度過一個平安幸福年!

          7.異議申請

          申報單狀態(tài)未通過的,可點擊【查看詳情】查看不通過的原因。

          不通過原因有兩種:

          (1)未查到2021年12月度當(dāng)前員工在杭社保或工傷險繳納記錄。

          (2)當(dāng)前員工不符合非浙戶籍。

          若是因為員工信息填寫錯誤造成未通過,可以點擊【修改員工信息】更正員工姓名和手機號。

          若對不通過原因有異議,可點擊【提交異議】上傳證明材料發(fā)起異議申請(異議處理不通過后不能再發(fā)起,還未處理的異議申報人可撤銷)。

          8.處理記錄

          異議經(jīng)政府端審批后返回審批結(jié)果,可在處理記錄里查看詳細說明。

          9.親清攻略

          親清在線在頁面頂端的“親清攻略”可查閱操作手冊和常見問題。

          ?下載與登錄

          通過應(yīng)用市場或政務(wù)服務(wù)網(wǎng)(www.zjzwfw.gov.cn/zjzw/zj/zw_pc_download) 下載浙里辦APP。個人實名登錄浙里辦后,在“杭州市本級”站點首頁腰線處可見“親清在線”入口或直接搜索“親清在線”。

          本端提供:

          ①靈活就業(yè)參保人員申報;

          ②企業(yè)員工查看本人是否通過審核。

          ? 查看政策

          進入置頂政策“春節(jié)期間留杭省外員工電子消費券發(fā)放”,查看閱讀政策內(nèi)容,系統(tǒng)根據(jù)當(dāng)前用戶自動顯示不同功能。靈活就業(yè)參保人員顯示【申報】按鈕,可進入申報;單位參保員工顯示【查看】按鈕,可查閱審批通過情況。

          ? 申報政策

          如當(dāng)前用戶符合靈活就業(yè)參保、非浙戶籍(2021年12月31日)、有效在杭居住證等條件,將顯示以下頁面,個人選中承諾事項后,提交申報即可完成申報。

          如不符合以上條件,系統(tǒng)將根據(jù)情況返回以下三種提示:

          ? 異議申請

          不符合2021年12月份靈活就業(yè)參保條件的需上傳個人參保證明、非浙戶籍證明、在杭居住證等掃描件或清晰照片。

          提出異議經(jīng)人工審批后將返回結(jié)果。

          ? 查看申報結(jié)果

          如完成申報的,可查看申報記錄。單位申報和個人申報結(jié)果都在此處展示。

          用人單位為員工申報的狀態(tài)

          個人申報的狀態(tài)

          ? 申報關(guān)閉

          1月24日21點后申報將關(guān)閉;1月25日12點后異議申請將關(guān)閉。

          如申報中還遇到其他問題

          咨詢服務(wù)看這里

          NO.1 線上咨詢

          本政策頁面右側(cè)設(shè)置D小二咨詢圖標(biāo)。點擊開啟后,申報單位可通過即時對話方式在線與親清D小二進行互動交流,支持發(fā)送圖文信息、在線查看常見問題等服務(wù)。

          本次電子消費券咨詢開通時間為1月18-25日,其中人工客服時間:1月18日-21日8:00-21:00,1月22日-23日為8:00-19:00,1月24日-25日為8:00-21:00。D小二響應(yīng)時間在3分鐘以內(nèi)。若D小二因過于忙碌無法及時回復(fù)消息,申報單位可以選擇留言,留言將生成工單由D小二處理。

          NO.2 熱線咨詢

          • 政策咨詢熱線:96345。提供政策申報方面問題咨詢。服務(wù)時間從2022年1月12日起至活動結(jié)束。

          • 消費券客服熱線:銀聯(lián)7×24小時專屬客服熱線95516。服務(wù)時間從1月28日至2月底。提供消費券領(lǐng)取、使用、退款等相關(guān)問題的咨詢和處理。

          常見問題

          1.登錄賬號等級無法辦理

          本政策需要具備二級以上實名認(rèn)證賬號進行操作,對應(yīng)經(jīng)辦人認(rèn)證等級2級以上,即1級、2級賬號可以直接申報本政策。如出現(xiàn)登錄賬號等級無法辦理的提示,可進入右上角【我的企業(yè)】【我的信息】-【經(jīng)辦人授權(quán)】查看賬號等級。

          1級經(jīng)辦人指通過電子數(shù)字證書及電子營業(yè)執(zhí)照登錄的企業(yè)賬號。2級經(jīng)辦人指在浙江政務(wù)服務(wù)網(wǎng)完成高級實名認(rèn)證的賬號。

          如需要使用3級賬號申報,可通過1級或2級賬號給3級賬號單獨授權(quán)本政策申報權(quán)限。選中經(jīng)辦人給您的賬號授權(quán)。

          2.經(jīng)辦人信息不完善

          使用數(shù)字證書或電子營業(yè)執(zhí)照登錄親清平臺,在事項辦理中,可能會出現(xiàn)經(jīng)辦人信息不完善的提示:

          可點擊“我的企業(yè)”“修改手機號”補全經(jīng)辦人手機號信息。

          3.批量導(dǎo)入失敗/添加失敗

          通過【批量導(dǎo)入】導(dǎo)入Excel表格,員工信息出現(xiàn)缺失字段或人員重復(fù)等問題將會跳出以下提示。

          4.港澳臺、外籍靈活就業(yè)參保人員

          無法登錄浙里辦申報的

          港澳臺、外籍在杭參加靈活就業(yè)社保的,如無法正常使用浙里辦,請往電子郵箱bgs@fzw.hz.gov.cn寄送本人簽名的留杭承諾函照片進行報名,審核情況將以郵箱回復(fù)。承諾函模板可點擊此鏈接下載:《港澳臺及外籍在杭靈活就業(yè)參保人員春節(jié)期間個人留杭承諾函》。

          .JQuery

          JQuery 是將 JS 的一些代碼塊進行封裝,方便使用。

          1.JQ的引入

          (1)link 導(dǎo)入

          先進入 https://www.bootcdn.cn/ 網(wǎng)站進行查找,找到后復(fù)制到一個 js 中,進行引用。

          (2)直接復(fù)制標(biāo)簽

          <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>

          二.JQ JS 相互轉(zhuǎn)換

          1. JQ 獲取元素

          $('.p1').eq(1).text('今天天氣真好')
              $('.p1').html('<h>天氣真熱</h>')

          2.JS 轉(zhuǎn) JQ

          $(ap1).text('天好冷')

          3. JQ 轉(zhuǎn) JS

          	var ap3=$('.p1')
              ap3[0].innerText='金地是'
              ap3.get(1).innerText='多少金幣' //get() 傳下標(biāo)

          4. JQ JS 都可用

          $('ul li').each(function (){
                  console.log($(this).text());
                  // console.log(this.innerText);
                  console.log($(this).index()); //jq 獲取下標(biāo)
          
              })

          三.JQ 操作 HTML 屬性

          <button>添加</button>
          <button>刪除</button>

          1. 添加 class

          //添加class
              $("button").eq(0).click(function (){
                  $("div").addClass("div1")
              })

          2. 刪除 class

          (1)removeClass

          //刪除class
              $("button").eq(1).click(function (){
                  $("div").removeClass("div1")
              })

          (2)removeAttr

          //刪除屬性和屬性值
              $("button").eq(1).click(function (){
          $("div").removeAttr("class")

          3. 修改 class

          (1)toggleclass

          //無則增 有則增
           $("button").eq(0).click(function (){
           	$("div").toggleClass("div1")

          (2)attr

          //無則增 有則改
          $("button").eq(0).click(function (){
                  $("div").attr("class","div1")
                  $("div").attr("class","div2")
              })

          4.獲取 value

          $("input").eq(0).val('666');

          四.JQ 操作 CSS 樣式

          1. 獲取盒子寬高

          (1)獲取寬

          console.log($("div").width());

          (2)獲取內(nèi)邊框加寬

          $("div").innerWidth()

          (3)獲取內(nèi)邊框,邊框外邊距和寬的寬度

          $("div").outerWidth()

          2. JQ 修改 CSS

          // jq修改css
             $("div").css("background","blue")
             $("div").css({
                 "background":"pink",
                 "width":"150px"
             })

          3.定位元素(父級元素一定要有定位)

          $(".div2").position()

          4.定位瀏覽器窗口

          $(".div2").offset()

          五. JQ 事件

          1.單擊事件

          $("div").click(function (){
                  console.log(1);
              })

          2.雙擊事件

          $("div").dblclick(function (){
                  console.log(2);
              })

          3.劃入事件

          $("div").mouseenter(function (){
                  console.log(3);
              })

          4.劃出事件

          $("div").mouseout(function (){
                  console.log(4);
              })

          5.劃入劃出事件

          $("div").hover(
                  function (){
                      console.log(3);
                  },function (){
                      console.log(5);
                  }
              )

          6.綁定事件

          $("button").click(function (){
                  $("p").on("click",function (){
                      $("p").css('background','red')
                  })
              })

          7.綁定多個事件

          $("p").on({
                   "mouseenter":function (){
                       $(this).css('background','yellow')
                   },
                   "mouseout":function (){
                       $(this).css('background','blue')
                   }
               })

          8.清除事件

          $("button").click(function (){
                  $("p").off()
              })

          六. JQ 動畫

          1. 隱藏

          $("button").eq(0).click(function (){
                  // $("div").hide(1000)
                  $("div").slideUp(1000)
          
              })

          2.顯示

          $("button").eq(1).click(function (){
                  $("div").show(1000)
                  // $("div").slideDown(1000)
              })

          3.取反

          $("button").eq(2).click(function (){
                  $("div").slideToggle(1000)
                  // $("div").slideDown(1000)
              })

          4.淡出事件

          $("button").eq(3).click(function (){
                  $("div").fadeOut(1000)
              })

          5.淡入事件

          $("button").eq(4).click(function (){
                  $("div").fadeIn(1000)
              })

          6.淡入淡出取反事件

          $("button").eq(5).click(function (){
                  $("div").fadeToggle(1000)
              })

          7.動畫效果

          $("button").eq(6).click(function (){
                  $("div").delay(100).animate({
                      "width":"130px",
                      "height":"130px",
                      "top":"50px",
                      "left":"20px",
                  })
              })

          8.停止

          $("button").eq(7).click(function (){
                  $("div").stop(1000)
              })

          附(今日份學(xué)習(xí)):


          主站蜘蛛池模板: 中文字幕一区二区三区久久网站| 最新欧美精品一区二区三区| 人妻AV一区二区三区精品| 无码毛片视频一区二区本码 | 精品欧美一区二区在线观看| 国内精品视频一区二区三区八戒| 麻豆视频一区二区三区| 国产一区二区精品久久岳 | 在线观看精品一区| 国产成人精品a视频一区| 一区二区中文字幕| 濑亚美莉在线视频一区| 丰满爆乳一区二区三区| 中文字幕精品一区二区2021年| 最新中文字幕一区| 激情爆乳一区二区三区| 国产一区玩具在线观看| 国产日本亚洲一区二区三区| 国模精品视频一区二区三区| 日本一区午夜爱爱| 国产激情视频一区二区三区| 国精产品一区一区三区| 国产美女露脸口爆吞精一区二区| 黄桃AV无码免费一区二区三区 | 日本高清不卡一区| 久久久久99人妻一区二区三区| 色欲综合一区二区三区| 亚洲日韩国产一区二区三区在线| 中文字幕无线码一区二区 | 国产精品久久亚洲一区二区| 国产av福利一区二区三巨| 久久精品一区二区三区日韩| 无码一区18禁3D| 精品久久久久中文字幕一区| 污污内射在线观看一区二区少妇 | 波多野结衣一区视频在线| 一区免费在线观看| 亚洲欧美日韩国产精品一区| 制服丝袜一区二区三区| 国产91精品一区| 亚洲A∨精品一区二区三区下载|