天天看點

爬蟲

Python搞爬蟲比較專業一些,Java也可以搞。

行情來了-- 為我們的客戶提供比較精準的炒股,炒币等資訊。

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

爬到資料之後,以郵件的方式發送給我的訂閱客戶!

Java如何爬取想要的資料呢?--> Jsoup 工具。官網--​​https://jsoup.org/​​

JSoup 是java 開發的一款html解析器,可以直接解析某個url,html文本,提供了一整套非常省力的API.

參考網站: ​

該工具類:

先通過網址擷取到一個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);
    }