国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Jsoup爬蟲獲取自己網站在百度搜索中的實時排名

陳偉 / 2652人閱讀

摘要:沒有結果返回百度搜索的可以指定頁碼,最多一頁個,使用后有效減少了連接次數。但親測下來設置過以后的結果與實際用戶在百度搜索的結果排序和個數都有出入。

一直有一個需求,希望看到自己網站在百度的實時的排名
用過一些工具,要么反應遲鈍,要么結果不準確或不實時
于是打算用jsoup寫一個小爬蟲來實時百度看網站排名

直接上代碼



依賴只有jsoup
jar包下載地址:https://mvnrepository.com/artifact/org.jsoup/jsoup
或者引入
maven依賴


    org.jsoup
    jsoup
    1.11.3



代碼

package com.zzzmh.spider;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class test {
    /** 百度搜索基本url 后面可以接的參數有 pn rn ie 等 */
    public final static String baseUrl = "https://www.baidu.com/s?ie=utf-8";
    /** 連接超時時間 */
    public static int timeout = 30 * 1000;
    /** 連接重試次數 */
    public static int times = 10;
    /** UA */
    public static String UserAgent[] = {
            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
            "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
            "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32",
            "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 UBrowser/5.6.12150.8 Safari/537.36",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32" };

    /** 獲取隨機UA */
    public static String getRandomUA() {
        return UserAgent[(int) (Math.random() * (UserAgent.length))];
    }

    /** 在這里進行連接 如果失敗會繼續重試 */
    public static Document getDocument(String url) {
        Document doc = null;
        for (int i = 0; i < times; i++) {
            try {
                doc = Jsoup.connect(url).header("User-Agent", getRandomUA()).timeout(timeout).get();
                if (doc != null)
                    break;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return doc;
    }

    /**
     * 爬取百度指定關鍵字和頁碼的數據,只存id(排名號),title,url(百度會把url縮寫) 親測雖然
     * 加了&rn=50可以明顯增加效率,但結果和用戶實際看到的有所出入,并不準確,故用默認rn,與用戶實際看到保持一致
     * 
     * @param keyword 關鍵字
     * @param page    頁碼
     */
    public static List> spider(String keyword, int page) {
        List> result = new ArrayList<>();
        try {
            Document document = getDocument(baseUrl + "&wd=" + keyword + "&pn=" + (page * 10));
            Elements els = document.getElementsByClass("result");
            for (Element el : els) {
                Map map = new HashMap<>();
                try {
                    map.put("id", el.attr("id"));
                    map.put("title", el.getElementsByTag("a").get(0).text());
                    map.put("url", el.getElementsByClass("f13").get(0).getElementsByTag("a").text());
                    result.add(map);
                } catch (Exception e) {
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 分析在指定關鍵字在百度的排名
     * 
     * @param keyword 關鍵字
     * @param url     要找的目標包含的url
     * @param maxPage 最多找幾頁,防止死循環
     * @return 找得到返回map 超過最大頁碼還找不到返回null
     */
    public static Map BaiduRanking(String keyword, String url, int maxPage) {
        System.out.println("開始查找百度中關鍵字為 "" + keyword + "" 且url包含 "" 
                + url + "" 的相關數據排名 最多查詢 " + maxPage + "頁");
        for (int i = 0; i < maxPage; i++) {
            // 輸出當前頁碼和個數,不需要輸出可以去掉
            System.out.println("正在查詢第" + i + "頁中的第" + (i * 10 + 1) + " ~ " + ((i + 1) * 10) + "個");
            List> list = spider(keyword, i);
            for (Map map : list) {
                if (map.get("url").contains(url)) {
                    return map;
                }
            }
        }
        return null;
    }

    public static void main(String[] args) {
        /*
         * 例如 找關鍵字 極簡壁紙 主要的網址特征 bz.zzzmh.cn 最多找20頁 (相當于找1~200個中有無匹配)
         * 若有匹配返回 id title url
         * 若無匹配返回 Null
         */
        System.out.println(BaiduRanking("極簡壁紙", "zzzmh.cn", 20));
    }
}


效果

1、網站標題: zzzmh"s blog 網站url: https://zzzmh.cn
參數:

關鍵字: "zzzmh" 目標包含url: "zzzmh.cn" 最多查詢頁數: "20"

運行結果:

開始查找百度中關鍵字為 "zzzmh" 且url包含 "zzzmh.cn" 的相關數據排名 最多查詢 20頁
正在查詢第0頁中的第1 ~ 10個
正在查詢第1頁中的第11 ~ 20個
{id=13, title=zzzmh"s Blog - Design By zmh, url=https://zzzmh.cn/  百度快照}



2、網站標題: 極簡壁紙... 網站url: https://bz.zzzmh.cn
參數:

關鍵字: "極簡壁紙" 目標包含url: "zzzmh.cn" 最多查詢頁數: "20"

運行結果:

開始查找百度中關鍵字為 "極簡壁紙" 且url包含 "zzzmh.cn" 的相關數據排名 最多查詢 20頁
正在查詢第0頁中的第1 ~ 10個
正在查詢第1頁中的第11 ~ 20個
正在查詢第2頁中的第21 ~ 30個
正在查詢第3頁中的第31 ~ 40個
正在查詢第4頁中的第41 ~ 50個
正在查詢第5頁中的第51 ~ 60個
正在查詢第6頁中的第61 ~ 70個
正在查詢第7頁中的第71 ~ 80個
正在查詢第8頁中的第81 ~ 90個
正在查詢第9頁中的第91 ~ 100個
{id=93, title=極簡壁紙_極致嚴選高清電腦桌面壁紙美圖4k_最潮桌面壁紙網站, url=https://bz.zzzmh.cn/  百度快照}



3、網站標題: 極簡插件... 網站url: https://chrome.zzzmh.cn
參數:

關鍵字: "極簡插件" 目標包含url: "zzzmh.cn" 最多查詢頁數: "20"

運行結果:

開始查找百度中關鍵字為 "極簡插件" 且url包含 "zzzmh.cn" 的相關數據排名 最多查詢 20頁
正在查詢第0頁中的第1 ~ 10個
正在查詢第1頁中的第11 ~ 20個
正在查詢第2頁中的第21 ~ 30個
正在查詢第3頁中的第31 ~ 40個
正在查詢第4頁中的第41 ~ 50個
正在查詢第5頁中的第51 ~ 60個
正在查詢第6頁中的第61 ~ 70個
正在查詢第7頁中的第71 ~ 80個
正在查詢第8頁中的第81 ~ 90個
正在查詢第9頁中的第91 ~ 100個
正在查詢第10頁中的第101 ~ 110個
正在查詢第11頁中的第111 ~ 120個
正在查詢第12頁中的第121 ~ 130個
正在查詢第13頁中的第131 ~ 140個
正在查詢第14頁中的第141 ~ 150個
正在查詢第15頁中的第151 ~ 160個
正在查詢第16頁中的第161 ~ 170個
正在查詢第17頁中的第171 ~ 180個
正在查詢第18頁中的第181 ~ 190個
正在查詢第19頁中的第191 ~ 200個
null



補充:

有結果返回map包含id、title、url。沒有結果返回 Null

百度搜索的url可以指定rn頁碼,最多一頁50個,使用后有效減少了連接次數。但親測下來設置過rn以后的結果與實際用戶在百度搜索的結果排序和個數都有出入。故選擇用默認rn來檢測,效果最準確。




本篇博客也發表在了我的個人主頁,歡迎查看,地址https://zzzmh.cn/single?id=58

END

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73116.html

相關文章

  • Java爬蟲之利用Jsoup自制簡單的搜索引擎

    摘要:的官方網址為,其使用手冊網址為本次分享將實現的功能為利用爬取某個搜索詞語暫僅限英文的百度百科的介紹部分,具體的功能介紹可以參考博客爬蟲自制簡單的搜索引擎。 ??Jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據。Jsoup的官方網址為: https:...

    GHOST_349178 評論0 收藏0
  • Python爬蟲筆記1-爬蟲背景了解

    摘要:學習爬蟲的背景了解。但是搜索引擎蜘蛛的爬行是被輸入了一定的規則的,它需要遵從一些命令或文件的內容,如標注為的鏈接,或者是協議。不同領域不同背景的用戶往往具有不同的檢索目的和需求,搜索引擎無法提供針對具體某個用戶的搜索結果。 學習python爬蟲的背景了解。 大數據時代數據獲取方式 如今,人類社會已經進入了大數據時代,數據已經成為必不可少的部分,可見數據的獲取非常重要,而數據的獲取的方式...

    oujie 評論0 收藏0
  • Java爬蟲之爬取中國高校排名前100名并存入MongoDB中

    摘要:介紹在博客爬蟲爬取中國高校排名前名并寫入中,我們利用來寫爬蟲,將中的大學排名表格爬取出來,并存入到中。本次分享將用的來實現相同的功能,并將爬取到的數據存入到數據庫中。 介紹 ??在博客:Python爬蟲——爬取中國高校排名前100名并寫入MySQL中,我們利用Python來寫爬蟲,將http://gaokao.xdf.cn/201702/1... 中的大學排名表格爬取出來,并存入到My...

    jzzlee 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<