爬虫

Python搞爬虫比较专业一些,Java也可以搞。
行情来了-- 为我们的客户提供比较精准的炒股,炒币等信息。

网站:https://www.abuquant.com/rankDetail/final_score_rank/coin/day#selectExchange

爬到数据之后,以邮件的方式发送给我的订阅客户!
Java如何爬取想要的数据呢?--> Jsoup 工具。官网--https://jsoup.org/
JSoup 是java 开发的一款html解析器,可以直接解析某个url,html文本,提供了一整套非常省力的API.

参考网站:https://blog.csdn.net/justLym/article/details/105715516
该工具类:
先通过网址获取到一个Document对象
然后通过各种API获取Element 或者 Elements 元素

<div>  <a>  <button>都称之为一个元素。
// 通过元素id值来获取对应的节点
Element element = document.getElementById(String  id);

// 通过标签名来获取
Elements elements = document.getElementsByTag(String tagName);

// 通过类名来获取
Elements elements = document.getElementsByClass(String className);

// 通过属性名来获取
Elements elements = document.getElementsByAttribute(String key);

// 通过指定属性名称和属性值来获取节点对象
Elements elements = document.getElementsByAttributeValue(String key, String value);

// 获取所有节点元素
Elements elements = document.getAllElements();
    public Elements select(String cssQuery) {
        return Selector.select(cssQuery, this);
    }

	File input = new File("/tmp/input.html");
	Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
	
	//带有href属性的a元素
	Elements links = doc.select("a[href]");
	
	//扩展名为.png的图片
	Elements pngs = doc.select("img[src$=.png]");
	  
	//class等于masthead的div标签
	Element masthead = doc.select("div.masthead").first();
	
	//在h3元素之后的a元素	
	Elements resultLinks = doc.select("h3.r > a"); 

分析要爬取的网站:

经过分析,发现网站中我们想要的资源,都在class="newList" 的下面,每一个li都是一个币种。
代码:

    @Test
    public void test04 () throws IOException{

        List<Message> list =new ArrayList<Message>();

        // 获取一个文档对象,一个网页就是一个文档
        Document document = Jsoup.connect("https://www.abuquant.com/rankDetail/final_score_rank/coin/day#selectExchange").get();
        // 获取该文档下面的,所有被class="newList" 修饰的元素
        Elements lists = document.getElementsByClass("newsList");
        // 获取newsList元素中的一个即可,在这个元素的第一个中,获取里面所有的li标签对象
        Elements lis = lists.first().getElementsByTag("li");
        System.out.println(lis.size());
        for (int i = 0; i < lis.size() ; i++) {
            Message message =new Message();
            Element element = lis.get(i);
            Element h3 = element.getElementsByTag("h3").first();
            String coinName= h3.text();
            System.out.println(coinName);
            message.setCoinName(coinName);
            Element xs8 = element.getElementsByClass("layui-col-xs8").first();
            Elements ps= xs8.getElementsByTag("p");
            for (int j = 0; j < ps.size(); j++) {
                Element p = ps.get(j);
                if(j==0){
                    message.setLevel(p.text());
                }
                if(j==3){
                    message.setScore(p.text());
                }
                System.out.println(p.text());
            }
            list.add(message);
        }
        System.out.println(list);
    }
posted @ 2021-09-20 14:15  码丁XIA  阅读(56)  评论(0)    收藏  举报