动态网页抓取( 前情介绍前段时间开发了一个功能,解决过程中遇到的问题)

优采云 发布时间: 2022-02-03 00:22

  动态网页抓取(

前情介绍前段时间开发了一个功能,解决过程中遇到的问题)

  Java基于Selenium动态爬取页面

  介绍

  前段时间开发了一个功能,通过HttpClient访问某个页面,获取该页面的所有html内容;然后被抓取的整个页面显示在我自己的网页上;但是一段时间后,网页升级了,图片变成了动态加载,无法直接通过HttpClient获取完整的页面内容。图片处于延迟加载状态,无法显示正确的内容。

  解决方案

  由于没有办法直接爬取静态页面,可以尝试动态爬取页面;如何爬取动态页面,本文使用Selenium来动态爬取页面。Selenium 模拟正常打开浏览器并浏览网页的过程。当整个页面加载到页面底部,然后抓取整个网页的内容,就可以完整的获取到页面内容。

  Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。

  编码

  引用 Selenium 库的 jar 包

  

org.seleniumhq.selenium

selenium-java

3.141.59

  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作做好了,接下来就是开发代码了。废话不多说,直接上代码吧。

<p>public String selenium(String url) throws InterruptedException {

// 设置 chromedirver 的存放位置

System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");

// 设置无头浏览器,这样就不会弹出浏览器窗口

ChromeOptions chromeOptions = new ChromeOptions();

chromeOptions.addArguments("--headless");

Long scrollSize = 1000L;

WebDriver webDriver = new ChromeDriver(chromeOptions);

webDriver.get(url);

//设置浏览器的宽高

Dimension dimension = new Dimension(1000, scrollSize.intValue());

webDriver.manage().window().setSize(dimension);

String html = "";

//获取JS执行器,可以执行js代码来控制页面

JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);

//获取页面的高度

Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");

logger.info("article hight is : {}",scrollHeight);

//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数

Long loopNum = scrollHeight/scrollSize;

loopNum = loopNum+1;

logger.info("page need scroll times : {}",loopNum);

for(int i =0 ; i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线