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);
}