为什么突然学习爬虫呢,当然因为工作需要,打造数据库时需要大量数据支撑,于是我去搜索java如何使用爬虫,当然是有很多库的,但是也有很多坑,学了两天才爬下来,小小记录下踩坑经历.....
刚开始搜索时,说是使用jsoup可以做到爬虫效果,但是实操之后,局限性太大了,JSoup 是一个静态解析库,它无法执行页面上的 JavaScript 代码。并且!!!会被拦截报错412,于是了解到了今天的主角selenium。
selenium
应该是python中用的比较多,多用于自动化测试,当然也有java库。首先来了解一下他的用法,本次测试用到的是chrome浏览器作为模拟浏览器访问。
要使用selenium,首先需要:
- 安装 WebDriver 驱动程序:WebDriver 是 Selenium 的核心组件,用于控制浏览器进行自动化操作。根据您使用的浏览器类型(如 Chrome、Firefox、Edge 等),您需要下载相应浏览器的 WebDriver 驱动程序,并将其配置到您的项目中(这里必须注意浏览器和驱动的大版本号必须相同)。(本次测试使用版本为107.0.5304.122版本 chrome浏览器老版本下载地址Google Chrome 64bit Windows版_chrome浏览器,chrome插件,谷歌浏览器下载,谈笑有鸿儒)这里提供两个可以下载chromedriver驱动的地址(与浏览器匹配):http://chromedriver.storage.googleapis.com/index.html CNPM Binaries Mirror
- 导入 Selenium 的依赖:在 Java 项目中,您需要添加 Selenium 的依赖。如果使用 Maven 进行依赖管理,可以在项目的 pom.xml 文件中添加 Selenium 的依赖项。(*这里导入selenium依赖时有大坑!!我找了一早上,selenium的版本和guava的版本兼容较差,需要特定版本才能使用*)提供可以使用的兼容版本(如果版本不兼容会报错"java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.of(Ljava/lang/Object;Ljava/lang/")
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.0.1-jre</version> </dependency>
- 写测试脚本
//建立目标元虚拟浏览器链接 private static void util(String url) { System.setProperty("webdriver.chrome.driver", "保存chromedriver.exe的路径"); ChromeDriver chromeDriver = new ChromeDriver(); chromeDriver.get(url); try { Thread.sleep(3000);//停留三秒等网页加载 } catch (InterruptedException e) { throw new RuntimeException(e); } List<WebElement> we = chromeDriver.findElement(By.className("u-list")).findElements(By.tagName("a"));//这里是我用来遍历网页中的u-list下的网页地址和网页名称 HashMap<String, String> list = new HashMap<>(); for (WebElement i : we) { String text = i.getText(); String fullUrl = i.getAttribute("href"); list.put(text, fullUrl); } chromeDriver.quit();//关闭浏览器 specification(list);//这是我写的一个格式化网页数据的方法,可以自定义修改为下载网络文件等方法 }