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