java爬虫抓取动态网页(java调用、Firefox获取页面信息,以及Jsoup解析**)

优采云 发布时间: 2021-11-09 20:08

  java爬虫抓取动态网页(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选择器不会写,可以看这里:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线