感觉java做爬虫效果也是还不错的,我总结了下主要有以下三种:
(一)基于jsoup
(二)基于httpcilent
(三)基于selenium
第一种和第二种类似,没多大难度,用法也很相似,但是经我亲自测试有个缺点:不能采集基于ajax请求的数据。这个就很令人蛋疼了。。。
第三种方法实际是基于浏览器的驱动模拟人工操作的,理论上可以采集网页的任何数据。不便之处就是每次需要打开一个浏览器不过也能接受。
今天主要就说说基于selenium实现爬取数据吧!!
第一步:pom.xml引入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> <!-- phantomjsdriver(selenium webdriver 第三方支持) phantomjsdriver是一个Java编写的无界面浏览器,在这里为了让大家更容易接触selenium,所以我使用的是谷歌浏览器,因为你写的代码都能在浏览器上显示 --> <dependency> <groupId>com.codeborne</groupId> <artifactId>phantomjsdriver</artifactId> <version>1.4.4</version> </dependency> |
第二步:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
WebDriver driver = PageUtils.getChromeDriver("http://www.weather.com.cn/alarm/newalarmlist.shtml"); PageUtils.selectStrByJS(driver, "pro"); WebElement submitElement = driver.findElement(By.cssSelector("input#Submit")); PageUtils.scrollToElementAndClick(submitElement, driver); Thread.sleep(3000); List<WebElement> liElements = driver.findElements(By.cssSelector(".dDUl li")); //统计当天的采集数量 Integer sumNum=0; for (int i=0;i<liElements.size();i++){ //发布时间 String text = liElements.get(i).getText(); //返回标题 String title = getTitle(text); //返回地区 String area = getArea(text); log.warn(area); //获取风险等级 String risk = getRisk(title); —————————————————————————————————————————————————————————————————————————————————— 后面可以根据自己的业务情况对采集的数据进行处理!!!! } |
PageUtis里面的工具法法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/** * 打开谷歌浏览器,返回一个WebDriver,对浏览器的操作通过webDriver来执行 * * @param url * @return */ public static WebDriver getChromeDriver(String url) { //设置谷歌浏览器驱动,我放在项目的路径下,这个驱动可以帮你打开本地的谷歌浏览器 System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); // 设置对谷歌浏览器的初始配置 开始 HashMap<String, Object> prefs = new HashMap<String, Object>(); //设置禁止图片 //prefs.put("profile.managed_default_content_settings.images", 2); //设置禁止cookies //prefs.put("profile.default_content_settings.cookies", 2); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("prefs", prefs); DesiredCapabilities chromeCaps = DesiredCapabilities.chrome(); chromeCaps.setCapability(ChromeOptions.CAPABILITY, options); // 设置对谷歌浏览器的初始配置 结束 //新建一个谷歌浏览器对象(driver) WebDriver driver = new ChromeDriver(chromeCaps); //通过driver控制浏览器打开链接(url) driver.get(url); return driver; } |
第三步:把浏览器驱动.exe放在项目根目录在此我上传到网盘,自行下载即可
https://xiwen.lanzoui.com/i6A5wgwmcyb