使用 Selenium 快速实现一个爬虫

系统版本:macOS Mojave 10.14.3

编译器:Intellij IDEA

Chrome 版本 :73.0.3683.68

一、安装与 Chrome 版本对应的 Selenium Chrome 驱动

  1. Homebrew/homebrew-cask 搜索对应的版本chromedriver 73.0.3683
  1. 点击进入之后,复制Raw的地址。
  1. 使用brew进行安装,安装完成之后的驱动路径/usr/local/bin/chromedriver
1
brew cask install https://github.com/Homebrew/homebrew-cask/raw/2234daa8d782f272c106cde09aef8da1cb68ce54/Casks/chromedriver.rb
  1. 可以查看安装驱动的版本。
1
chromedriver -v

二、在 IDEA 中使用 Selenium 快速实现一个爬虫

  1. 引入 Maven 依赖
1
2
3
4
5
<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>3.141.59</version>
</dependency>
  1. 一个抓取博客所有文章标题的例子。
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;

public class Selenium_Demo {

    public static WebDriver driver;
  
    public static void main(String[] args) {
        // 设置驱动路径
        System.setProperty("webdriver.driver.chrome", "/usr/local/bin/chromedriver");

        // 实例化浏览器
        driver = new ChromeDriver();

        // 打开网页
        driver.get("https://streamelody.github.io/");

        // 可以通过 Chrome 调试得到下一页 a 标签 的 CSS 选择器
        String selector = "a[rel=next]";

        while (true) {
            if (isElementExits(driver, By.cssSelector(selector))) {
                // 抓取博客中所有文章的标题和网址
                List<WebElement> postTitleList = driver.findElements(By.className("post-title-link"));
                for (WebElement element : postTitleList) {
                    String href = element.getAttribute("href");
                    String title = element.getText();
                    System.out.println(title + " " + href);
                }

                // 点击下一页
                driver.findElement(By.cssSelector(selector)).click();
            } else {
                // 关闭浏览器
                driver.quit();
                break;
            }
        }
    }

    // 判断下一页是否存在
    public static boolean isElementExits(WebDriver driver, By selector) {
        try {
            driver.findElement(selector);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}

参考资料

  1. Homebrew安装指定版本软件的办法
  2. Selenium-Server-Standalone搭建
  3. Mac上Java+selenium+Chrome环境配置
  4. java selenium (五) 元素定位大全