爬取网站:https://flights.ctrip.com/actualtime/arrive-sha.p1/
爬取上海浦东机场的航班信息
技术:使用Jsoup技术
jsoup 是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
参考:Jsoup官方文档 Jsoup_Doc文档
网页获取和解析速度飞快,推荐使用。
主要功能如下:
1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;
难点:因为table中的数据有很多页,所以要做到翻页爬取数据
直接上代码,详细解释都在代码里:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.*;
public class Reptile {
public static void main(String[] args) throws Exception{
Reptile.run();
}
public static void run() throws Exception {
StringBuffer data = new StringBuffer();
for (int i = 0; i < 50; i++) {
// 因为要爬取分页信息,就通过循环重新加载网页来来实现,一般网页的分页URL都是有规律的,一般就是在后面的数字加1得到,所以利用这个规律来实现分页爬取数据的效果
// 网页地址
String url = "https://flights.ctrip.com/actualtime/arrive-sha.p" + (i + 1) + "/";
try {
// 根据URL获取当前URL界面的doc对象,里面存储着界面的所有元素,类似于BOM
Document doc = Jsoup.connect(url).get();
/*这个select方法可以对Elements集合类型对象,或者Element单个类型元素对象来使用 select方法的其中一个作用就是找到在括号里传入要找标签的名字,他就会返回调用这个select方法的标签对象所有的和要查 找标签名字一样的标签对象的集合,注意这里返回的是Elements集合对象 后面那个last()方法和first()方法,是对集合操作的方法返回的是Element元素对象,first()就是返回元素集合的第一个元素last() 就是返回的最后一个*/
// 获取第一个表格
Element table = doc.select("table").last();
// System.out.println(element);
Element tbody = table.select("tbody").first();
Elements trs = tbody.select("tr");
// 这个就是遍历元素集合的每一个元素,来查找想要的标签对象
for (Element tr : trs) {
Elements tds = tr.select("td");
for (Element td : tds) {
// text()方法局势返回调用标签元素中的文本内容,返回的是String类型
data.append(td.text() + "\t");
}
data.append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
//将结果写入到文件当中
File f = new File("c:" + File.separator + "Users" + File.separator + "97307" + File.separator + "Desktop" + File.separator + "data.txt");
OutputStream out = null;
out = new FileOutputStream(f);
byte b[] = data.toString().getBytes();
out.write(b);
out.close();
System.out.println(data);
}
}