国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分

這篇具有很好參考價值的文章主要介紹了[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

系列文章目錄

通過Java+Selenium查詢文章質(zhì)量分
通過Java+Selenium查詢某個博主的Top40文章質(zhì)量分
通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分


[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分


前言

大家好,我是青花,本篇給大家分享一下《通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分》,針對上一章Top40文章,做了簡單的優(yōu)化,在查詢博客質(zhì)量分的時候,控制了頻繁的開關(guān)Chrome瀏覽器,避免了重復(fù)的加載Chrome驅(qū)動以及打開Chrome瀏覽器。
備注: 在上章節(jié)里,加載100文章,在50-60文章數(shù)時,就會被限制訪問。


一、環(huán)境準(zhǔn)備

瀏覽器:本篇使用的是Chrome
Chrome瀏覽器版本:113
Chrome驅(qū)動版本:113(Java爬蟲第一篇)
Java版本:Jdk1.8
selenium版本: 4.9.1


二、查詢某個博主的Top100文章

2.1、修改pom.xml配置

	 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
     <dependency>
         <groupId>org.jsoup</groupId>
         <artifactId>jsoup</artifactId>
         <version>1.11.3</version>
     </dependency>

     <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.9.1</version>
     </dependency>
     
     <dependency>
         <groupId>com.google.code.gson</groupId>
         <artifactId>gson</artifactId>
         <version>2.10.1</version>
     </dependency>

2.2、配置Chrome驅(qū)動(SeleniumUtil類,包含驅(qū)動位置,圖片保存路徑)

/***
 * @title SeleniumUtil
 * @desctption Selenium輔助類
 * @author Kelvin
 * @create 2023/6/21 22:47
 **/
@Slf4j
public class SeleniumUtil {

    public final static String CHROMEDRIVERPATH = "/Users/apple/Downloads/chromedriver_mac64/chromedriver";

    public final static String LOCATION_IMG_BASE_PATH = "~/java/code/spiderX/img/";

    public static void sleep(int m) {
        try {
            Thread.sleep(m);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
	System.setProperty("webdriver.chrome.driver", SeleniumUtil.CHROMEDRIVERPATH );//    	chromedriver localPath

2.3、引入瀏覽器配置

	 WebDriver driver;
	 ChromeOptions chromeOptions = new ChromeOptions();

2.4、設(shè)置無頭模式

	chromeOptions.addArguments('--headless')
	chromeOptions.addArguments("--remote-allow-origins=*");

2.5、啟動瀏覽器實例,添加配置信息

	driver = new ChromeDriver(chromeOptions);

2.6、窗口設(shè)置

	chromeOptions.addArguments("–no-sandbox");  //--start-maximized

2.7、禁止加載圖片設(shè)置

	// 增加禁止加載圖片的設(shè)置
   	HashMap<String, Object> prefs = new HashMap<>();
    prefs.put("profile.default_content_settings", 2);
    chromeOptions.setExperimentalOption("prefs", prefs);
    chromeOptions.addArguments("blink-settings=imagesEnabled=false");//禁用圖片

[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分
[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分

2.8、加載博主地址

 	String baseUrl = "https://blog.csdn.net/s445320?type=blog";

[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分

2.9、加載文章列表

   //定位到文章列表
   WebElement mainSelectE = driver.findElement(By.cssSelector("div.mainContent"));

2.10、加載下一頁

模擬瀏覽器滾動條下拉,加載下一頁數(shù)據(jù)

   //加載下一頁
   JavascriptExecutor jsDriver = (JavascriptExecutor) driver;//將java中的driver強(qiáng)制轉(zhuǎn)型為JS類型
   jsDriver.executeScript("window.scrollTo(0, 50)");
   jsDriver.executeScript("window.scrollTo(0, document.body.scrollHeight-20)");
   SeleniumUtil.sleep(500);
   jsDriver.executeScript("window.scrollTo(0, document.body.scrollHeight +1)");
   SeleniumUtil.sleep(2000);

2.11、設(shè)置加載100條數(shù)據(jù)

 	// 獲取Top100的數(shù)量
    int topNum = 100;
        
	//如果加載的數(shù)據(jù)超過或等于 要求的最大長度,返回現(xiàn)在已加載的數(shù)據(jù)
    if( webElements.size() >= topNum ) {
        for(WebElement element : webElements ){
            System.out.println(  element.getAttribute("href")  );
            blogUrlList.add(element.getAttribute("href"));
        }
        log.info("文章已讀取 {} 條,最大限制 {} 條!" , webElements.size() , topNum);
        break;
    }

[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分

2.12、對頻繁的開關(guān)Chrome瀏覽器做了優(yōu)化

優(yōu)化1

針對上一章Top40文章,做了簡單的優(yōu)化,在查詢博客質(zhì)量分的時候,控制了頻繁的開關(guān)Chrome瀏覽器,避免了重復(fù)的加載Chrome驅(qū)動以及打開Chrome瀏覽器。

優(yōu)化2

初次的時候加載查詢博客質(zhì)量分頁面,后續(xù)只需要更換博客文章鏈接地址,去獲取數(shù)據(jù)即可。
[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分

	/**
     *  獲取質(zhì)量數(shù)據(jù)
     * @throws IOException
     */
    CsdnBlogInfo csdnQcBySelenium(String blogUrl , WebDriver driver , boolean isFirst) {
        log.info("csdnQcBySelenium start!");
        CsdnBlogInfo csdnBlogInfo = new CsdnBlogInfo();

        //第一次時加載查詢質(zhì)量分頁面
        if( isFirst ) {
            driver.get("https://www.csdn.net/qc");
            SeleniumUtil.sleep(500);
        }

[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分

2.13、成果


00:44:50.693 [main] INFO com.kelvin.spiderx.service.CsdnQcService - csdnQcBySelenium start!
00:45:03.151 [main] INFO com.kelvin.spiderx.service.CsdnQcService - 文章已讀取 100 條,最大限制 100 條!
00:45:03.151 [main] INFO com.kelvin.spiderx.service.CsdnQcService - blogUrlList size:100
00:45:03.294 [main] INFO com.kelvin.spiderx.service.CsdnQcService - blogUrlList:
[{"title":"[刷題] 刪除有序數(shù)組中的重復(fù)項","posttime":"- 青花鎖 · 2023-06-25 12:49:42 -","score":"82","remark":"文章質(zhì)量良好"},{"title":"[Selenium] 通過Java+Selenium查詢某個博主的Top40文章質(zhì)量分","posttime":"- 青花鎖 · 2023-06-25 01:22:55 -","score":"87","remark":"文章質(zhì)量良好"},{"title":"[Selenium] 通過Java+Selenium查詢文章質(zhì)量分","posttime":"- 青花鎖 · 2023-06-23 08:42:36 -","score":"86","remark":"文章質(zhì)量良好"},{"title":"【并發(fā)知識點】CAS的實現(xiàn)原理及應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 11:55:48 -","score":"90","remark":"文章質(zhì)量良好"},{"title":"【并發(fā)知識點】AQS的實現(xiàn)原理及應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 11:35:53 -","score":"90","remark":"文章質(zhì)量良好"},{"title":"簡單介紹html/javascript、ajax應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 10:18:01 -","score":"92","remark":"文章質(zhì)量良好"},{"title":"[設(shè)計模式] OOP六大原則","posttime":"- 青花鎖 · 2023-06-22 01:24:19 -","score":"89","remark":"文章質(zhì)量良好"},{"title":"[Web前端] Servlet及應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 01:07:56 -","score":"91","remark":"文章質(zhì)量良好"},{"title":"【在線商城系統(tǒng)】數(shù)據(jù)來源-爬蟲篇","posttime":"- 青花鎖 · 2023-06-22 00:48:46 -","score":"87","remark":"文章質(zhì)量良好"},{"title":"《項目實戰(zhàn)》構(gòu)建SpringCloud alibaba項目(三、構(gòu)建服務(wù)方子工程store-user-service)","posttime":"- 青花鎖 · 2023-06-21 18:20:46 -","score":"86","remark":"文章質(zhì)量良好"},{"title":"《項目實戰(zhàn)》構(gòu)建SpringCloud alibaba項目(二、構(gòu)建微服務(wù)鑒權(quán)子工程store-authority-service)","posttime":"- 青花鎖 · 2023-06-19 17:24:53 -","score":"86","remark":"文章質(zhì)量良好"},{"title":"《項目實戰(zhàn)》使用JDBC手寫分庫","posttime":"- 青花鎖 · 2023-06-16 17:56:03 -","score":"88","remark":"文章質(zhì)量良好"},{"title":"《項目實戰(zhàn)》構(gòu)建SpringCloud alibaba項目(一、構(gòu)建父工程、公共庫、網(wǎng)關(guān)))","posttime":"- 青花鎖 · 2023-06-15 20:41:46 -","score":"92","remark":"文章質(zhì)量良好"},{"title":"《項目實戰(zhàn)》 Jenkins 與 CICD、發(fā)布腳本","posttime":"- 青花鎖 · 2023-06-13 15:53:46 -","score":"90","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第三十二章 微服務(wù)鏈路跟蹤-sleuth zipkin","posttime":"- 青花鎖 · 2023-06-11 18:41:09 -","score":"90","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第三十一章 ShardingSphere - ShardingSphere-JDBC","posttime":"- 青花鎖 · 2023-06-11 18:25:34 -","score":"80","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第三十章 分布式事務(wù)框架seata TCC模式","posttime":"- 青花鎖 · 2023-06-11 10:38:21 -","score":"89","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第二十九章 分布式事務(wù)框架seata AT模式","posttime":"- 青花鎖 · 2023-06-11 10:23:44 -","score":"92","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第二十八章 分布式鎖框架-Redisson","posttime":"- 青花鎖 · 2023-06-09 17:55:59 -","score":"91","remark":"文章質(zhì)量良好"},{"title":"【項目實戰(zhàn)】一、Spring boot整合JWT、Vue案例展示用戶鑒權(quán)","posttime":"- 青花鎖 · 2023-06-09 09:06:43 -","score":"92","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第二十七章 CAS","posttime":"- 青花鎖 · 2023-05-30 16:26:30 -","score":"87","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第二十六章 Java鎖的分類","posttime":"- 青花鎖 · 2023-05-29 17:28:47 -","score":"91","remark":"文章質(zhì)量良好"},{"title":"《微服務(wù)實戰(zhàn)》 第二十五章 Java多線程安全與鎖","posttime":"- 青花鎖 · 2023-05-29 16:07:53 -","score":"91","remark":"文章質(zhì)量良好"}.....]
00:45:03.296 [main] INFO com.kelvin.spiderx.service.CsdnQcService - 此博主有文章,開始解析文章質(zhì)量分!
00:45:03.296 [main] INFO com.kelvin.spiderx.service.CsdnQcService - csdnQcBySelenium start!
---------- 省略解析過程
此博主質(zhì)量分如下:
00:50:40.699 [main] INFO com.kelvin.spiderx.service.CsdnQcService - {"title":"[刷題] 刪除有序數(shù)組中的重復(fù)項","posttime":"- 青花鎖 · 2023-06-25 12:49:42 -","score":"82","remark":"文章質(zhì)量良好"},{"title":"[Selenium] 通過Java+Selenium查詢某個博主的Top40文章質(zhì)量分","posttime":"- 青花鎖 · 2023-06-25 01:22:55 -","score":"87","remark":"文章質(zhì)量良好"},{"title":"[Selenium] 通過Java+Selenium查詢文章質(zhì)量分","posttime":"- 青花鎖 · 2023-06-23 08:42:36 -","score":"86","remark":"文章質(zhì)量良好"},{"title":"【并發(fā)知識點】CAS的實現(xiàn)原理及應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 11:55:48 -","score":"90","remark":"文章質(zhì)量良好"},{"title":"【并發(fā)知識點】AQS的實現(xiàn)原理及應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 11:35:53 -","score":"90","remark":"文章質(zhì)量良好"},{"title":"簡單介紹html/javascript、ajax應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 10:18:01 -","score":"92","remark":"文章質(zhì)量良好"},{"title":"[設(shè)計模式] OOP六大原則","posttime":"- 青花鎖 · 2023-06-22 01:24:19 -","score":"89","remark":"文章質(zhì)量良好"},{"title":"[Web前端] Servlet及應(yīng)用","posttime":"- 青花鎖 · 2023-06-22 01:07:56 -","score":"91","remark":"文章質(zhì)量良好"}....]


00:50:40.693 [main] INFO com.kelvin.spiderx.service.CsdnQcService - csdnQcBySelenium end!

三、循環(huán)查詢文章質(zhì)量分

通過Java+Selenium查詢文章質(zhì)量分
查詢文章質(zhì)量分可見上述文章,在上一章中對返回值,禁止圖片加載做了優(yōu)化。在本章中,對driver做了優(yōu)化,多個查詢頁面共用一個driver,且在進(jìn)入查詢質(zhì)量分階段,只在初次加載頁面。

備注: 后期針對查詢質(zhì)量分,在并發(fā)情況下,可考慮driver池化技術(shù),100篇文章分為N段,分別去作業(yè),優(yōu)化性能。


四、代碼

package com.kelvin.spiderx.service;

import com.google.gson.Gson;
import com.kelvin.spiderx.util.SeleniumUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/***
 * @title CsdnQcService
 * @desctption CSDN查詢質(zhì)量分
 * @author LTF
 * @create 2023/6/21 23:02
 **/
@Slf4j
public class CsdnQcService {

    @Data
    class CsdnBlogInfo {
        private String title;

        private String posttime;

        private String score;

        private String remark;

    }

    /**
     *  獲取質(zhì)量數(shù)據(jù)
     * @throws IOException
     */
    CsdnBlogInfo csdnQcBySelenium(String blogUrl , WebDriver driver , boolean isFirst) {
        log.info("csdnQcBySelenium start!");
        CsdnBlogInfo csdnBlogInfo = new CsdnBlogInfo();

        if( isFirst ) {
            driver.get("https://www.csdn.net/qc");
            SeleniumUtil.sleep(500);
        }

        //定位到輸入框
        WebElement inputSelectE = driver.findElement(By.cssSelector("input.el-input__inner"));
        //輸入文字地址
        inputSelectE.sendKeys(blogUrl);

        SeleniumUtil.sleep(100);

        //定位查詢按鈕
        WebElement qcSelectE = driver.findElement(By.cssSelector("div.trends-input-box-btn"));
        //點擊查詢按鈕
        qcSelectE.click();

        SeleniumUtil.sleep(1000);

        //獲取右邊區(qū)域 -- 文章質(zhì)量分結(jié)果區(qū)域
        WebElement mainSelectE = driver.findElement(By.cssSelector("div.csdn-body-right"));

        //轉(zhuǎn)化為Jsoup文檔處理
        Document doc = Jsoup.parse( mainSelectE.getAttribute("outerHTML") );

        //獲取文章標(biāo)題
        String title = doc.select("span.title").text();
        if(!StringUtils.isEmpty(title)) {
            csdnBlogInfo.setTitle(title);
        }

        //獲取作者和發(fā)布時間
        String posttime = doc.select("span.name").text();
        if(!StringUtils.isEmpty(posttime)) {
            csdnBlogInfo.setPosttime(posttime);
        }

        //獲取質(zhì)量分
        String score = doc.select("p.img").text();
        if(!StringUtils.isEmpty(score)) {
            csdnBlogInfo.setScore(score);
        }

        //獲取博文質(zhì)量分建議
        String remark = doc.select("p.desc").text();
        if(!StringUtils.isEmpty(remark)) {
            csdnBlogInfo.setRemark(remark);
        }

        //打印結(jié)果
        log.info("文章標(biāo)題:{} , 作者和發(fā)布時間:{} , 質(zhì)量分:{} , 博文建議:{}" , title , posttime , score , remark );

//        driver.quit();
        log.info("csdnQcBySelenium end!");
        return csdnBlogInfo;
    }

    /**
     *  查詢指定博主的文章質(zhì)量分
     */
    void allBlogQcDataBySelenium() {
        String baseUrl = "https://blog.csdn.net/s445320?type=blog";

        System.setProperty("webdriver.chrome.driver", SeleniumUtil.CHROMEDRIVERPATH );// chromedriver localPath
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--remote-allow-origins=*");
        chromeOptions.addArguments("–no-sandbox");  //--start-maximized

        // 增加禁止加載圖片的設(shè)置
        HashMap<String, Object> prefs = new HashMap<>();
        prefs.put("profile.default_content_settings", 2);
        chromeOptions.setExperimentalOption("prefs", prefs);
        chromeOptions.addArguments("blink-settings=imagesEnabled=false");//禁用圖片

        WebDriver driver = new ChromeDriver(chromeOptions);

        driver.get(baseUrl);

        SeleniumUtil.sleep(200);

        //定位到文章列表
        WebElement mainSelectE = driver.findElement(By.cssSelector("div.mainContent"));

        boolean isEnd = false;
        // 獲取Top40的數(shù)量
        int topNum = 100;
        // 上一次讀取的文章數(shù)
        int prePoint = 0;
        List<String> blogUrlList = new ArrayList<>();
        List<WebElement>  webElements = null;
        while ( isEnd == false  ) {
            JavascriptExecutor jsDriver = (JavascriptExecutor) driver;//將java中的driver強(qiáng)制轉(zhuǎn)型為JS類型
            jsDriver.executeScript("window.scrollTo(0, 50)");
            jsDriver.executeScript("window.scrollTo(0, document.body.scrollHeight-20)");
            SeleniumUtil.sleep(500);
            jsDriver.executeScript("window.scrollTo(0, document.body.scrollHeight +1)");
            SeleniumUtil.sleep(2000);

            webElements = mainSelectE.findElements(By.cssSelector("article.blog-list-box>a"));

            // 如果上一次的文章數(shù)
            //    等于 當(dāng)前頁面的文章數(shù):文章已全部讀取完
            //    否則,繼續(xù)加載下一頁
            if( webElements.size() == prePoint){
                for(WebElement element : webElements ){
                    System.out.println(  element.getAttribute("href")  );
                    blogUrlList.add(element.getAttribute("href"));
                }
                log.info("文章已全部讀取完");
                break;
            } else {
                prePoint = webElements.size();
            }

            //如果加載的數(shù)據(jù)超過或等于 要求的最大長度,返回現(xiàn)在已加載的數(shù)據(jù)
            if( webElements.size() >= topNum ) {
                for(WebElement element : webElements ){
                    System.out.println(  element.getAttribute("href")  );
                    blogUrlList.add(element.getAttribute("href"));
                }
                log.info("文章已讀取 {} 條,最大限制 {} 條!" , webElements.size() , topNum);
                break;
            }
        }
        log.info("blogUrlList size:{}" , blogUrlList.size());
        log.info("blogUrlList:{}" , new Gson().toJson(blogUrlList) );

        List<CsdnBlogInfo> csdnBlogInfoList = null;
        if(CollectionUtils.isEmpty(blogUrlList)) {
            log.info("此博主沒有發(fā)表文章!");
        } else {
            log.info("此博主有文章,開始解析文章質(zhì)量分!");
            csdnBlogInfoList = new ArrayList<>();
            int num = 0;
            for (String blogUrl : blogUrlList) {
                try{
                    CsdnBlogInfo csdnBlogInfo = this.csdnQcBySelenium(blogUrl , driver , num <= 0 );
                    if( null != csdnBlogInfo ) {
                        csdnBlogInfoList.add(csdnBlogInfo);
                    }
                    num ++;
                } catch (Exception e) {
                    log.info("解析文章質(zhì)量分失敗,文章:{}" , blogUrl);
                }

            }

            if(CollectionUtils.isEmpty(csdnBlogInfoList)) {
                log.info("解析文章質(zhì)量分失??!");
            } else {
                log.info("此博主質(zhì)量分如下:");
                log.info(new Gson().toJson(csdnBlogInfoList));
            }

        }
        driver.quit();
        log.info("讀取數(shù)據(jù)完畢!the end!");
    }

    public static void main(String[] args) {
        CsdnQcService csdnQcService = new CsdnQcService();
        csdnQcService.allBlogQcDataBySelenium();
    }


}


總結(jié)

通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分至此結(jié)束,優(yōu)化空間還有很大,以實現(xiàn)效果為主。文章來源地址http://www.zghlxwxcb.cn/news/detail-508001.html

到了這里,關(guān)于[Selenium] 通過Java+Selenium查詢某個博主的Top100文章質(zhì)量分的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ES 通過查詢更新某個字段,Error 500 (Internal Server Error)

    ES 通過查詢更新某個字段,Error 500 (Internal Server Error)

    問題描述: 項目中通過查詢ES中某個字段,并更新某個值的字段,當(dāng)量比較大的時候報錯: upsert associated failed: elastic: Error 500 (Internal Server Error): Failed to compile inline script [ctx._source.pcap_filename = ] using lang [painless] [type=general_script_exception] 問題解析: 1. 通過查詢某個字段并更新這

    2024年02月03日
    瀏覽(28)
  • 通過Python+Selenium查詢文章質(zhì)量分

    通過Python+Selenium查詢文章質(zhì)量分 質(zhì)量分查詢地址 大家好,我是空空star,本篇給大家分享一下 《通過Python+Selenium查詢文章質(zhì)量分》 。 瀏覽器:本篇使用的是Chrome Chrome驅(qū)動版本:110.0.5481.77 Python版本:Python3.8 selenium版本: 4.8.2 Selenium基礎(chǔ)篇之環(huán)境準(zhǔn)備 import pprint import time fro

    2024年02月11日
    瀏覽(18)
  • java通過stream流的形式把列表中某個字段的值取出并生成列表

    可以使用Java 8中引入的Stream API來實現(xiàn)這一功能。例如,假設(shè)你有一個類名為Person的列表,并且你想要從這個列表中提取所有人的姓名并生成一個新的列表。你可以這樣做: 這段代碼首先使用 stream() 方法將列表轉(zhuǎn)換為流。然后,使用 map() 方法對流中的每個元素執(zhí)行一個轉(zhuǎn)換函

    2024年02月12日
    瀏覽(25)
  • TOP100 圖論

    TOP100 圖論

    給你一個由? \\\'1\\\' (陸地)和? \\\'0\\\' (水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。 島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。 此外,你可以假設(shè)該網(wǎng)格的四條邊均被水包圍。 示例 1: 示例 2: 提示: m == grid.length n == g

    2024年02月19日
    瀏覽(15)
  • top100-貪心算法

    題目鏈接 121. 買賣股票的最佳時機(jī) - 力扣(LeetCode) 解題思路 1、暴力破解 我們需要找出給定數(shù)組中兩個數(shù)字之間的最大差值,即max(prices[j] - prices[i]) 2、一次遍歷 遍歷價格數(shù)組一遍,記錄歷史最低點,然后在每一天考慮這么一個問題:如果我是在歷史最低點買進(jìn)的,那么

    2024年03月25日
    瀏覽(18)
  • 【Leetcode】top 100 圖論

    【Leetcode】top 100 圖論

    基礎(chǔ)知識補(bǔ)充 1.圖分為有向圖和無向圖,有權(quán)圖和無權(quán)圖; 2.圖的表示方法:鄰接矩陣適合表示稠密圖,鄰接表適合表示稀疏圖; ? ?鄰接矩陣: ? ?鄰接表: 基礎(chǔ)操作補(bǔ)充 1.鄰接矩陣: 2.鄰接表: 3.圖的遍歷: ?題目 200 島嶼數(shù)量 給你一個由? \\\'1\\\' (陸地)和? \\\'0\\\' (水)組

    2024年04月10日
    瀏覽(30)
  • 【Leetcode】top 100 多維動態(tài)規(guī)劃

    62 不同路徑 一個機(jī)器人位于一個? m x n ? 網(wǎng)格的左上角,機(jī)器人每次只能向下或者向右移動一步,機(jī)器人試圖達(dá)到網(wǎng)格的右下角,問總共有多少條不同的路徑? 分析:dp[i][j] 代表走到 (i, j) 的路徑總和數(shù) 遞推規(guī)律:dp[i][j] = dp[i-1][j] + dp[i][j-1] 初始條件:dp[0][:] = 1 dp[:][0] =?1

    2024年03月26日
    瀏覽(33)
  • LeetCode - #85 最大矩形(Top 100)

    LeetCode - #85 最大矩形(Top 100)

    本題為 LeetCode 前 100 高頻題 本題由于沒有合適答案為以往遺留問題,最近有時間將以往遺留問題一一完善。 我們社區(qū)陸續(xù)會將顧毅( Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。 )的 Swift 算法題題解整理為文字版以方便大家學(xué)習(xí)與閱讀。 LeetCode 算法到目前我

    2024年02月10日
    瀏覽(24)
  • Leetcode Top 100 Liked Questions(序號105~139)

    Leetcode Top 100 Liked Questions(序號105~139)

    題意:根據(jù)前序遍歷和中序遍歷來構(gòu)造二叉樹 要用遞歸造樹,要同時遞歸左子樹和右子樹,造樹需要左邊邊界和右邊邊界 build函數(shù)有 樹的跟指針, 前序的有左邊邊界和右邊邊界,中序的左邊邊界和右邊邊界 如果lr return; 因為是先序遍歷,所以左子樹是先序的第一個,先構(gòu)

    2024年02月10日
    瀏覽(16)
  • Leetcode Top 100 Liked Questions(序號53~74)

    Leetcode Top 100 Liked Questions(序號53~74)

    題意:一個數(shù)組,找到和最大的子串 我記得好像On的動態(tài)規(guī)劃來做的?但是想不起來了,先死做,用的 前綴和——TLE超時 那就只能想想dp怎么做了 假設(shè)dp[i]表示的是以 i 為右端點的最大的子串,dp[0]是自己; i=1時,如果dp[0]小于0,dp[1]=nums[1],否則dp[1]=dp[0]+nums[1] i=2時,如果

    2024年02月12日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包