Jsoup
jsoup 可直接解析某个URL地址、HTML文本内容。可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
- 从一个URL、文件或字符串中解析HTML
- 增添请求头(先用postman看一下需要哪些)
Document dox = Jsoup.connect(url).header("","").post();
//使用DOM或CSS选择器来查找、取出数据
Elements select = dox.select("[class = tm10]");
Element element = select.select("p").get(0); //第0个P便签
Elements a1 = element.select("a");
- 可操作HTML元素、属性、文本
我常用的:
a1.attr("href"); //获取标签中的文字 (href:链接 这里是获取链接)
a1.text; //获取标签中的文本
a1.select("script").remove(); //去广告敲好用
Selenium
- 下载谷歌浏览器驱动
- 将驱动导入项目
- 添加依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
- 可以用了
ChromeOptions chromeOptions=new ChromeOptions();
//设置 chrome 的无头模式
//chromeOptions.setHeadless(Boolean.TRUE);
//获取谷歌浏览器对应驱动路径(驱动版本需要和电脑的版本对应)
String driverPath = new wrambychrome().getClass().getClassLoader().getResource("chromedriver.exe").getPath();
//设置系统属性,添加谷歌浏览器驱动
System.setProperty("webdriver.chrome.driver", driverPath);
//创建谷歌浏览器
WebDriver driver = new ChromeDriver(chromeOptions);
//设置窗口大小最大化
driver.manage().window().maximize();
//打开链接页面
String url = "http://www.";
driver.get(url);
driver.get(url);
//等页面加载一下
Thread.sleep(1000);
//获取标签中的内容
WebElement iframe = driver.findElement(By.tagName("iframe"));
driver.switchTo().frame(iframe);
WebElement element = driver.findElement(By.id("CheckPic"));
//点击
element.click();
//输入值
WebElement inputCheck = driver.findElement(By.id("InputCheck"));
inputCheck.sendKeys("");
//获取窗口句柄
driver.getWindowHandles();
//切换句柄到某个窗口
driver.switchTo().window(1);
//调用JavascriptExecutor
try {
//声明一个js执行器
JavascriptExecutor je = (JavascriptExecutor) driver;
//调用执行器的executeScript方法执行js脚本
je.executeScript("arguments[0].click();", webElement);
Thread.sleep(500);
}catch (Exception a){
}
Json
有的时候爬取的内容不在页面中,它返回的是一串json格式的内容
//获取的时候获取成字符串的格式
String str_json_all_school_information = Jsoup.connect(url).ignoreContentType(true).get().text();
//转换成JSONObject
JSONObject j_all_school_info = JSONObject.parseObject(str_json_all_school_information);
//获取json格式中的值
String school_list = j_all_school_info.getString("list");
JSONArray j_school_list = JSONObject.parseArray(school_list);
ignoreContentType(true) ,也就是忽略约定的,不然获取不了json格式的内容
HtmlUnit
类似于Selenium,无界面,下次一定用。
HttpClient
类似于Jsuop,下次一定用。