<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      動態頁面爬蟲前的準備:http://www.rzrgm.cn/maohuidong/p/18517953

      一:java添加maven依賴:
      <dependency>
      <groupId>us.codecraft</groupId>
      <artifactId>webmagic-core</artifactId>
      <version>0.7.4</version>
      </dependency>
      <dependency>
      <groupId>us.codecraft</groupId>
      <artifactId>webmagic-extension</artifactId>
      <version>0.7.4</version>
      </dependency>
      <!--selenium依賴-->
      <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>3.141.59</version>
      </dependency>

      二:重寫PageProcessor:

      import java.util.List;
      import java.util.Set;

      import org.openqa.selenium.By;
      import org.openqa.selenium.Cookie;
      import org.openqa.selenium.WebElement;
      import org.openqa.selenium.chrome.ChromeDriver;

      import org.openqa.selenium.chrome.ChromeOptions;
      import org.openqa.selenium.remote.RemoteWebDriver;
      import us.codecraft.webmagic.Page;
      import us.codecraft.webmagic.Site;
      import us.codecraft.webmagic.Spider;
      import us.codecraft.webmagic.pipeline.JsonFilePipeline;
      import us.codecraft.webmagic.processor.PageProcessor;

      /**
      * 準備抓取這個頁面:http://yapi.xxxxx.so/project/317/interface/api
      * 但是這個頁面需要登錄后才能訪問,登錄頁面為:http://yapi.xxxx.so/login
      * 登錄后抓取的頁面有 分頁, 分頁的特點是地址不變,所以從第二頁開始,無法通過webMagic抓取第二頁的內容
      * 只能通過Selenium來點擊下一頁的操作,然后再解析頁面。
      */
      public class YapiPageProcessor implements PageProcessor {

      private Site site = Site.me().setRetryTimes(3).setSleepTime(0).setTimeOut(3000);

      //用來存儲cookie信息
      private Set<Cookie> cookies;

      private RemoteWebDriver driver;

      public YapiPageProcessor(){
      System.setProperty("webdriver.chrome.driver","E:\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe");

      //創建瀏覽器參數對象
      ChromeOptions chromeOptions = new ChromeOptions();
      // 設置為 無界面瀏覽器 模式,若是不想看到瀏覽器打開,就可以配置此項

      //解決 403 出錯問題
      chromeOptions.addArguments("--remote-allow-origins=*");
      // chromeOptions.addArguments("--headless");
      chromeOptions.addArguments("--window-size=1440,1080");// 設置瀏覽器窗口打開大小

      RemoteWebDriver driver = new ChromeDriver(chromeOptions);
      this.driver = driver;
      }


      @Override
      public void process(Page page) {
      // 取所有的key 和對應的所有的value
      List<String> keys = page.getHtml().xpath("http://tbody[@class='ant-table-tbody']/tr/td/a/span/text()").all();
      List<String> values = page.getHtml().xpath("http://tbody[@class='ant-table-tbody']/tr/td/div/span[3]/text()").all();
      //獲取用戶的id
      for (int i = 0;i < keys.size();i++) {
      page.putField(keys.get(i),values.get(i));
      }

      while (driver.findElements(By.xpath("http://li[@title='下一頁' and @aria-disabled='false']")).size() > 0){
      // 點擊下一頁
      driver.findElement(By.xpath("http://li[@title='下一頁' and @aria-disabled='false']")).click();

      // 等待2S
      try {
      Thread.sleep(2000);
      } catch (InterruptedException e) {
      throw new RuntimeException(e);
      }

      List<WebElement> elements = driver.findElements(By.xpath("http://tbody[@class='ant-table-tbody']/tr"));
      for (int ii = 1;ii <= elements.size();ii++) {
      WebElement key = driver.findElement(By.xpath("http://tbody[@class='ant-table-tbody']/tr[" + ii + "]/td/a/span"));
      WebElement value = driver.findElement(By.xpath("http://tbody[@class='ant-table-tbody']/tr[" + ii + "]/td/div/span[3]"));
      page.putField(key.getText(),value.getText());
      }
      }
      }

      //使用 selenium 來模擬用戶的登錄獲取cookie信息
      public void login(String loginUrl,String userName,String password)
      {
      driver.get(loginUrl);

      driver.findElement(By.id("email")).clear();

      //在******中填你的用戶名
      driver.findElement(By.id("email")).sendKeys(userName);

      driver.findElement(By.id("password")).clear();
      //在*******填你密碼
      driver.findElement(By.id("password")).sendKeys(password);

      //模擬點擊登錄按鈕
      driver.findElement(By.xpath("http://button[@type='submit']")).click();

      //獲取cookie信息
      cookies = driver.manage().getCookies();
      // driver.close();
      }


      @Override
      public Site getSite() {

      //將獲取到的cookie信息添加到webmagic中
      for (Cookie cookie : cookies) {
      site.addCookie(cookie.getName().toString(),cookie.getValue().toString());
      }

      return site.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1");
      }

      public static void main(String[] args){

      YapiPageProcessor pageProcessor = new YapiPageProcessor();

      //調用selenium,進行模擬登錄
      pageProcessor.login("http://yapi.xxxx.so/login","xxx","xxx");
      Spider.create(pageProcessor)
      .addUrl("http://yapi.xxx.so/project/317/interface/api")
      .setDownloader(new MyDownloader(pageProcessor.driver))//可選擇使用自定義的
      // 輸出到D盤webmagic文件夾
      .addPipeline(new JsonFilePipeline("D:\\webmagic\\"))
      //開啟1個線程抓取
      .thread(1)
      //啟動爬蟲
      .run();
      System.out.println("爬取結束");
      }
      }

      三:重寫Downloader:

      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.chrome.ChromeDriver;
      import org.openqa.selenium.chrome.ChromeOptions;
      import org.openqa.selenium.remote.RemoteWebDriver;
      import us.codecraft.webmagic.downloader.Downloader;
      import us.codecraft.webmagic.*;
      import us.codecraft.webmagic.selector.PlainText;
      import org.openqa.selenium.Cookie;
      import java.util.Map;
      public class MyDownloader implements Downloader {
      //聲明驅動
      private RemoteWebDriver driver;

      public MyDownloader(RemoteWebDriver driver) {
      this.driver = driver;
      }

      /**
      * 由于selenium的默認域名為data;因此第一次必須跳轉到登錄頁,才能加入對應域名
      * @param request Request
      */
      @Override
      public Page download(Request request, Task task) {
      try {
      driver.get(request.getUrl());//第一次打開url,跳轉到登錄頁
      Thread.sleep(3000);//等待打開瀏覽器
      //獲取從process返回的site攜帶的cookies,填充后第二次打開url
      Site site = task.getSite();
      if (site.getCookies() != null) {
      for (Map.Entry<String, String> cookieEntry : site.getCookies()
      .entrySet()) {
      Cookie cookie = new Cookie(cookieEntry.getKey(),
      cookieEntry.getValue());
      driver.manage().addCookie(cookie);
      }
      //添加對應domain的cookie后,第二次打開url
      driver.get(request.getUrl());
      }
      Thread.sleep(2000);
      driver.executeScript("window.scrollTo(0, document.body.scrollHeight - 1000)");//需要滾動到頁面的底部,獲取完整的數據
      Thread.sleep(2000);//等待滾動完成
      //獲取頁面,打包成Page對象,傳給PageProcessor 實現類
      Page page = createPage(request.getUrl(), driver.getPageSource());
      //driver.close();//看需要是否關閉瀏覽器
      return page;
      } catch (InterruptedException e) {
      e.printStackTrace();
      }
      return null;
      }

      @Override
      public void setThread(int threadNum) {

      }

      //構建page返回對象
      private Page createPage(String url, String content) {
      Page page = new Page();
      page.setRawText(content);
      page.setUrl(new PlainText(url));
      page.setRequest(new Request(url));
      page.setDownloadSuccess(true);
      return page;
      }
      posted on 2024-11-07 18:29  毛會懂  閱讀(222)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人精品区| 精品国产中文字幕在线看| 鲁丝一区鲁丝二区鲁丝三区| 亚洲AV无码破坏版在线观看| 久久影院午夜伦手机不四虎卡| 57pao成人国产永久免费视频| 国产午夜精品久久精品电影| 最新精品国偷自产在线美女足| 人妻中出无码一区二区三区| 人妻熟女一区无中文字幕| 九九热在线精品视频九九| 国产精品自在自线免费观看| 大屁股国产白浆一二区 | 另类专区一区二区三区| 国产高清精品在线91| 中文字幕亚洲综合小综合| 国产在线不卡精品网站| 白嫩人妻精品一二三四区| 国产尤物精品自在拍视频首页| 精品人妻码一区二区三区| 抚松县| 日韩熟女熟妇久久精品综合| 最近中文字幕日韩有码| 色天天天综合网色天天| 午夜福利激情一区二区三区| 国产免费一区二区三区在线观看| 毛多水多高潮高清视频| 少妇被粗大的猛烈进出视频| 日本道不卡一二三区视频| 国产精品久久久久无码网站| 亚洲天堂激情av在线| 免费看成人欧美片爱潮app| 少妇无套内谢免费视频| 任我爽精品视频在线播放| 鲁丝片一区二区三区免费| 欧美激烈精交gif动态图| 无码人妻精品一区二区三区下载| 亚洲精品免费一二三区| 国产精品亚洲二区在线播放| 女同在线观看亚洲国产精品| 亚洲AV成人无码久久精品|