表格数据采集

乱码拜拜

질문, 리뷰하거나, 이 스크립트를 신고하세요.
// ==UserScript==
// @name         表格数据采集
// @namespace    http://hbchzz.ch.mnr.gov.cn
// @version      0.0.1
// @description  乱码拜拜
// @author       zhd
// @match        http://hbchzz.ch.mnr.gov.cn/Index/*
// @grant        none
// ==/UserScript==

(async function() {
    'use strict';
  
    var allDatas = []
  
    async function wait(time) {
      return new Promise(resolve => {
        setTimeout(()=> resolve(), time * 1000)
      })
    }
  
    function getTableData() {
      var table = document.querySelector('table')
      var trs = table.querySelectorAll('tr')
      var items = []
      for(var i = 1; i < trs.length; i++) {
        var item = {}
        var tds = trs[i].querySelectorAll('td')
        for(var j = 0; j < tds.length; j ++) {
          item[j] = tds[j].innerText
        }
        items.push(item)
      }
      return items
    }
  
    function getAnchors() {
      let anchors = document.querySelectorAll('a')
      anchors = Array.prototype.slice.call(anchors, 0)

      anchors = anchors.filter(anchor => !isNaN(anchor.innerHTML) || (anchor.children.length > 0 && anchor.children[0].src === "http://hbchzz.ch.mnr.gov.cn/images/PageNavi/moren.gif"))
      if(anchors.length > 10) {
        anchors = anchors.slice(1)
      }
      
      return anchors
    }
  
    function update() {
      allDatas = allDatas.concat(getTableData())
    }
  
    async function updatePage(anchors) {
      for(let a of anchors) {
        a.click()
        await wait(1)
        update()
      }
    }
  
    async function recursive() {
      let anchors = getAnchors()
      if(anchors.length < 10) {
        await updatePage(anchors)
        return
      } else {
        await updatePage(anchors)
        recursive()
      }
    }
  
    async function run() {
      console.log('run')
      
      update()
      await recursive()
      console.log(JSON.stringify(allDatas))
    }
  
    await run()
})();
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元