java爬虫抓取动态网页(java调用、Firefox获取页面信息,以及Jsoup解析**)
优采云 发布时间: 2021-11-09 20:08java爬虫抓取动态网页(java调用、Firefox获取页面信息,以及Jsoup解析**)
**
Java爬虫,调用Chrome、Firefox获取页面信息,Jsoup分析
**
前言:
某些 网站 具有反爬虫机制。在这种情况下,我们需要使用模拟真实浏览器来访问页面。在Linux环境下,我们需要设置浏览器headless模式。不过有一些网站反爬的比较好,会判断谷歌浏览器的headless模式,可以用火狐试试。
一、java调用Chrome(谷歌浏览器)抓取页面
1.本地安装的 Google Chrome 和 ChromeDriver
Chromedriver 地址:
注意:chromedriver的版本必须和谷歌浏览器的版本一致
2.chromedriver 需要配置环境变量,如果不配置环境变量需要调用
所需的依赖:
org.jsoup
jsoup
1.11.3
org.seleniumhq.selenium
selenium-java
public void ChromeDemo(){
//如果没有配置环境变量,需要调用
//第一个参数固定写法,第二个参数是chromedriver的安装位置
//System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
try {
//设置不弹出浏览器
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("disable-gpu");
//Chrome设置代理
// if (zsyzbConfig.proxyHost != null && !zsyzbConfig.proxyHost.equals("") && zsyzbConfig.proxyPort != null) {
// options.addArguments("--proxy-server=http://" + proxyIP);
//}
ChromeDriver driver = new ChromeDriver(options);
driver.get("要爬取的地址");
//获取页面源码
String content = driver.getPageSource();
//使用jsoup解析页面
Document document = Jsoup.parse(content);
String classTxt = document.getElementsByClass("Class属性").txt;
Elements content = document.getElementById("ID属性").select("js选择器");
} catch (Exception e) {
e.printStackTrace();
}
}
二、Java调用Firefox(火狐浏览器)抓取页面
1.火狐浏览器安装:
yum -y install firefox(安装火狐浏览器)
2.geckodriver 安装
(1) wget(下载浏览器对应的版本)
(2) tar -xvf geckodriver*.tar.bz2 (解压 geckodriver)
(3) mv geckodriver /user/local/bin/ (移动)
火狐浏览器已经安装好了,然后添加代码:
public void FirefoxDemo(){
try{
//调用geckodriver
System.setProperty("webdriver.gecko.driver", "geckodriver的路径");
//设置浏览器不弹出
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.addArguments("--headless");
firefoxOptions.addArguments("--disable-gpu");
driver = new FirefoxDriver(firefoxOptions);
driver.get("需要爬取的网站");
//获得爬取的页面的源码
String content = driver.getPageSource();
//Jsoup解析页面
Document document = Jsoup.parse(content);
String classTxt = document.getElementsByClass("Class属性").txt;
Elements content = document.getElementById("ID属性").select("js选择器");
}catch (Exception e) {
e.printStackTrace();
}finally {
driver.close();
}
}
三、Jsoup 抓取简单页面
public void JsoupDemo(){
try{
//Jsoup发请求获取页面
Document document = Jsoup.connect(url).get();
//根据页面的结构,具体解析页面
String classTxt = document.getElementsByClass("Class属性").txt;
Elements content = document.getElementById("ID属性").select("js选择器");
for (Element e : content) {
//例如:<a href=“www.baidu.com”> 则这样写:e.attr("href");
e.attr("标签的属性");
}
}catch (Exception e){
e.printStackTrace();
}
}
JS选择器不会写,可以看这里: