抓取动态网页( 1.什么是动态页面2.什么?())
优采云 发布时间: 2021-10-10 04:20抓取动态网页(
1.什么是动态页面2.什么?())
使用 selenium 抓取动态页面
1. 什么是动态页面2. 什么是硒
百度百科对硒的定义:
Selenium [1] 是一种用于 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。本工具的主要功能包括:测试与浏览器的兼容性-测试您的应用程序可以在不同的浏览器和操作系统上运行良好测试系统功能-创建回归测试以验证软件功能和用户需求支持自动记录动作和自动生成.Net、Java、Perl等多种语言的测试脚本。
简单理解一点,selenium是一个可以模拟浏览器的工具(框架)。通过使用 selenium 的 API,您可以模拟您所想的操作。
在爬虫中使用selenium是为了解决js的渲染问题。
3. 使用selenium 3.1 使用selenium的准备工作以Maven项目为例,在pom.xml文件中添加依赖
org.seleniumhq.selenium
selenium-java
3.141.59
您还可以添加 => selenium 的其他版本依赖项。
2.下载安装chromedriver,具体操作看这里,如果安装成功,可以写示例代码。
3.2 示例代码
编写主程序并执行示例代码:
public static void main(String[] args) {
//配置chromedriver webdriver.chrome.driver
System.getProperties().setProperty("webdriver.chrome.driver", "C:\\Users\\AIR\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");
//创建chromedriver对象
WebDriver webDriver = new ChromeDriver();
//请求要爬取的网页
webDriver.get("https://search.51job.com/list/180200,000000,0000,32,9,99,%25E8%25BD%25AF%25E4%25BB%25B6%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=");
//取html中的内容
WebElement webElement = webDriver.findElement(By.xpath("/html"));
//打印
System.out.println(webElement.getAttribute("outerHTML"));
webDriver.close();
}
4. 发生异常
无法创建 ChromeDriver,错误消息:
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
这篇文章解释了异常的两个原因。我排除了第一个。
第二个原因是Bloom filter的jar包冲突引起的。可以通过IDEA 2019的新特性查看jar包的依赖树,红线是冲突的jar包。如何查看依赖树。
我的解决方案:
首先更新最新版的布隆过滤器jar包:
com.google.guava
guava
29.0-jre
然后把最新版本的selenium更新为3.141.59(之前是2.32.0)。
org.seleniumhq.selenium
selenium-java
3.141.59
最后,程序运行成功,解析js渲染的页面,并在控制台打印结果。