如果可能的话,使用R(Rvest)..或VBA从网站上刮一张桌子

时间:2017-05-16 13:05:05

标签: r scrape rvest

我正在尝试从此网址中删除表格: " https://hutdb.net/17/players" 我花了很多时间学习rvest并使用了selectorgadget,但每当我尝试获取输出时,我总会得到相同的错误(Character(0))。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class AvlTree {
    private Node root;
    private int size;


    /**
     * default constructor.
     */
    public AvlTree() {
        this.root = null;
        this.size = 0;
    }

    /**
     * A constructor that  builds a new AVL tree containing  all unique values in the input
     * array
     *
     * @param data the values to add to tree
     */
    public AvlTree(int[] data) {
        for (int i = 0; i < data.length; i++) {
            add(data[i]);
        }
    }

    /**
     * A copy constructor that  creates a deep copy of the given oop.ex4.data_structures.AvlTree. The new tree
     * contains  all the values of the given tree, but  not necessarily in the same structure.
     *
     * @param avlTree an AVL tree.
     */
    public AvlTree(AvlTree avlTree) {

    }


    /**
     * Add a new node with the given key to the tree.
     *
     * @param newValue the value of the new node to add.
     * @return true if the value to add is not already in the tree and it was successfully added,
     * false otherwise.
     */
    public boolean add(int newValue) {
        if (root == null) {
            root = new Node(newValue);
            size++;
            return true;
        }
        Node current = root;
        Node parent = null;
        while (current != null) {
            if (current.getData() == newValue) {
                return false;
            }
            parent = current;
            if (newValue < current.getData()) {
                current = current.getChildernLeft();
            } else {
                current = current.getChildernRight();
            }
        }
        size++;
        // when we here the new NODE Need to be chiled of Node hashmor in parent.
        // addHelper is adding the new Node.2
//        addHelper(newNodeToAdd, current);
        return true;
    }


    private void addHelper(Node newNodeToAdd, Node current) {
//        if (newNodeToAdd.getData() > current.getData()) {
//            if (current.getChildernRight() == null) {
//                current.setChildernRight(newNodeToAdd);
//            } else {
//                addHelper(newNodeToAdd, current.getChildernRight());
//            }
//        } else {
//            if (current.getChildernLeft() == null) {
//                current.setChildernLeft(newNodeToAdd);
//            } else {
//                addHelper(newNodeToAdd, current.getChildernLeft());
//            }
//        }
    }


    /**
     * Check whether the tree contains  the given input  value.
     *
     * @param searchVal the value to search for.
     * @return the depth  of the node (0 for the root) with the given value if it was found in the tree, −1 otherwise.
     */
    public int contains(int searchVal) {
        Node current = root;
        int depth = 0;
        while (current != null) {
            if (current.getData() == searchVal) {
                return depth;
            }
            depth++;
            if (searchVal < current.getData()) {
                current = current.getChildernLeft();
            } else {
                current = current.getChildernRight();
            }
        }
        return -1;
    }


    /**
     * Removes the node with the given value from the tree, if it exists.
     *
     * @param toDelete the value to remove from the tree.
     * @return true if the given value was found and deleted, false otherwise.
     */
    public boolean delete(int toDelete) {
        size -= 1;
        return true;
    }


    /**
     * @return the number of nodes in the tree.
     */
    public int size() {
        return size;
    }

    /**
     * @return an iterator  for the Avl Tree. The returned  iterator  iterates  over the tree nodes.
     * in an ascending order, and does NOT implement the remove() method.
     */
    public Iterator<Integer> iterator(){
        List myList=new ArrayList<>();
        Node counter=root;
        Node counter1=root.getChildernLeft();
        if(counter1==null){
            myList.add(counter1);
        }

        Node counter1=root.getChildernLeft();
    }



    /**
     * Calculates  the minimum number of nodes in an AVL tree of height h
     *
     * @param h the height of the tree (a non−negative  number)  in question.
     * @return the minimum number of nodes in an AVL tree of the given height.
     */
    public static int findMinNodes(int h) {
        // I SOVLE THIS WITH ROCKISA
        int counterMin = 0;
        if (h == 0) {
            return counterMin = 1;
        }
        if (h == 1) {
            return counterMin = 2;
        }
        return (findMinNodes(h - 1) + findMinNodes(h - 2) + 1);
    }


    /**
     * Calculates  the maximum  number of nodes in an AVL tree of height h.
     *
     * @param h the height of the tree (a non−negative  number)  in question.
     * @return the maximum  number of nodes in an AVL tree of the given height.
     */
    public static int findMaxNodes(int h) {
        int counterMax = 0;
        for (int i = 0; i < h; i++) {
            counterMax += Math.pow(h, i);
        }
        return counterMax;
    }

    /**
     * @return
     */
    public String toString() {
        if (root == null) {
            return "";
        }
        return root.toString();
    }

    //THIS IS OK
    public void RotationRr(Node valRotation) {
        if (valRotation == root) {
            Node keepRootChild = root.getChildernRight();
            root.setChildernRight(null);

        }
        Node parent1 = valRotation.getParent();
        Node keepRightChild = valRotation.getChildernRight();///4
        valRotation.setChildernRight(null);
        keepRightChild.setParent(parent1);
        if (!keepRightChild.hasChildrenLeft()) {
            keepRightChild.setChildernLeft(valRotation);
            valRotation.setParent(keepRightChild);
        } else {
            keepRightChild.getChildernLeft().addNode(valRotation);

        }
    }

    public void RotationLr(Node valRotation) {
        RotationLl(valRotation);

    }

    /**
     * ........CHECK.....!!!!TODO
     *
     * @param valRotation
     */
    public void RotationLl(Node valRotation) {
        Node parent2 = valRotation.getParent();
        Node keepLeftChild = valRotation.getChildernLeft();
        valRotation.setChildernLeft(null);
        keepLeftChild.setParent(parent2);
        if (!keepLeftChild.hasChildrenRight()) {
            keepLeftChild.setParent(keepLeftChild);
        } else {
            keepLeftChild.getChildernRight().addNode(valRotation);
        }


    }


    public void RotationRl(Node valRotation) {
        RotationRr(valRotation);
    }




    public static void main(String[] args) {
        AvlTree avlTree = new AvlTree();
        avlTree.add(7);
        avlTree.add(2);
        System.out.println(avlTree.contains(2));
//        System.out.println(avlTree.contains(5));
        avlTree = new AvlTree();
        avlTree.add(2);
        avlTree.add(7);
        System.out.println(avlTree.contains(2));
//        System.out.println(avlTree);
    }


}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

数据是动态加载的,无法直接从html中检索。但是,例如,在Chrome DevTools中查看“网络”,我们可以在https://hutdb.net/ajax/stats.php?year=17&page=0&selected=OVR&sort=DESC找到格式正确的JSON

library(jsonlite)
dat <- fromJSON("https://hutdb.net/ajax/stats.php?year=17&page=0&selected=OVR&sort=DESC")

输出如下:

#     results aOVR    id League Year Card Team              Player Position Type Shoots  HGT
# 1      6308 6308  <NA>   <NA> <NA> <NA> <NA>                <NA>     <NA> <NA>   <NA> <NA>
# 2      <NA> 2030 11782    NHL   17  MOV  OTT       Erik Karlsson       RD  OFD  Right  6'0
# 3      <NA> 2060 11785    NHL   17  MOV  TBL       Victor Hedman       LD  TWD   Left  6'6
# 4      <NA> 2008 11791    NHL   17  MOV  CHI        Patrick Kane       RW  SNP   Left 5'11
# 5      <NA> 2058 13845    NHL   17  SCE  ANA        Ryan Getzlaf        C  PWF  Right  6'4
# 6      <NA> 2074 11824    NHL   17  MOV  BOS       Brad Marchand       LW  TWF   Left  5'9
# 7      <NA> 2008 11829    NHL   17  MOV  EDM      Connor McDavid        C  PLY   Left  6'2
# 8      <NA> 2048 11840    NHL   17  MOV  WSH   Nicklas Backstrom        C  PLY   Left  6'1
# 9      <NA> 2058 11841    NHL   17  MOV  PIT       Sidney Crosby        C  PLY   Left 5'11
# 10     <NA> 2065 13644    NHL   17 TOTY  WPG        Patrik Laine       RW  TWF  Right  6'3
# 11     <NA> 2008 13645    NHL   17 TOTY  EDM      Connor McDavid        C  PLY   Left  6'2
# 12     <NA> 2039 13680    NHL   17 TOTY  LAK        Drew Doughty       RD  TWD  Right  6'1
# 13     <NA> 2063 13689    NHL   17 TOTY  BOS    Patrice Bergeron        C  TWF  Right  6'2