第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

用Java爬慕課網(wǎng)猿問(2)

標簽:
爬蟲

上一篇讲了怎么爬取猿问首页,本次讲讲怎么将猿问后续爬去完成

遗留的问题

运行后,可以看到程序结束了,但是浏览器并没有关闭。WebDriver有quit()方法,可以关闭浏览器。

相信你也注意到了,浏览器打开的速度很慢,最好的办法是浏览器重用。

改造

将BrowserUtils改造如下:

public class BrowserUtils {


  private static WebDriver webDriver = null;

  /**
   * 打开谷歌浏览器.
   *
   * @return 返回浏览器
   */
  private static void getInstanceByChrome() {
    try {
      String driverDirectory = "chromedriver.exe";
      ChromeDriverService src = new ChromeDriverService.Builder()
              .usingDriverExecutable(new File(driverDirectory)).usingAnyFreePort().build();
      src.start();
      ChromeOptions options = new ChromeOptions();
      ChromeDriver driver = new ChromeDriver(src, options);
      driver.manage().window().maximize();
      webDriver = driver;
    } catch (IOException e) {
      e.printStackTrace();
    }

  }

  public static WebDriver getWebDriver() {
    if (null == webDriver) {
      getInstanceByChrome();
    }
    return webDriver;
  }

  public static void quit() {
    if (null != webDriver) {
      webDriver.quit();
      webDriver = null;
    }
  }
}

一个程序只有一个浏览器实例,而且提供了基本的浏览器获取关闭的方法。

后续爬取分析

打开慕课网猿问,url为:http://idcbgp.cn/wenda/

打开第二页猿问,url为:http://idcbgp.cn/wenda/recommend/2

打开第三页猿问,url为:http://idcbgp.cn/wenda/recommend/3

规律就是猿问的页码可通过变更url解决

所以接上节

将main的url变成http://idcbgp.cn/wenda/recommend/2,即可爬去第二页

带来的问题

不同页面内的问题可能是一个,怎么办

最简单的改造,返回一个Map型的参数,以Url为key,Task为value

改进

简单改造如下:

  public Map<String, Task> getTask() {
    WebDriver webDriver = BrowserUtils.getWebDriver();
    if (null == webDriver) {
      throw new RuntimeException("浏览器获取失败");
    }
    webDriver.get(super.getUrl());
    List<WebElement> listElement = webDriver.findElements(By.cssSelector(".item.clearfix"));
    Map<String, Task> tasks = new HashMap<>(listElement.size() * 2);
    for (WebElement webElement : listElement) {
      WebElement titleElement = webElement.findElement(By.className("que-title"));
      String title = titleElement.getText();
      String url = titleElement.getAttribute("href");
      Task task = new Task();
      task.setTitle(title);
      task.setUrl(url);
      tasks.put(url, task);
    }
    return tasks;
  }

main方法改造如下:

  public static void main(String args[]) throws Exception {
    Map<String, Task> data = new MainHandler("http://idcbgp.cn/wenda").getTask();
    for (int i = 2; i < 11; i++) {
      data.putAll(new MainHandler("http://idcbgp.cn/wenda/recommend/" + i).getTask());
    }
    BrowserUtils.quit();
    data.forEach((k, v) -> {
      System.out.println("title:" + v.getTitle() + "  url:" + v.getUrl());
    });
  }

爬取10页的数据

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 23
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消