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

資訊專欄INFORMATION COLUMN

Java抓取淘寶/天貓商品詳情

zlyBear / 3334人閱讀

摘要:有項目需求抓取淘寶天貓的商品詳情。如果為,則無限期等待設(shè)置控制器淘寶詳情抓取分析淘寶的頁面,商品詳情是異步從加載的,我們只要找到這個的,直接請求獲取即可。

有項目需求抓取淘寶天貓的商品詳情。琢磨一段時間搞出來了。放出來讓大家參考下。

Maven依賴:
HtmlUnit

        
            org.apache.httpcomponents
            httpclient
            4.5.2
        
        
        
            net.sourceforge.htmlunit
            htmlunit
            2.23
            
                
                    httpclient
                    org.apache.httpcomponents
                
            
        

準(zhǔn)備工作:

    public static BrowserVersion getBrowserVersion() {
        BrowserVersion bv = BrowserVersion.BEST_SUPPORTED.clone();
        // 設(shè)置語言,否則不知道傳過來是什么編碼
        bv.setUserLanguage("zh_cn");
        bv.setSystemLanguage("zh_cn");
        bv.setBrowserLanguage("zh_cn");

        // 源碼里是寫死Win32的,不知道到生產(chǎn)環(huán)境(linux)會不會變,穩(wěn)妥起見還是硬設(shè)
        bv.setPlatform("Win32");
        
        return bv;
    }
    
    public static WebClient newWebClient() {
        WebClient wc = new WebClient(bv);
        wc.getOptions().setUseInsecureSSL(true); // 允許使用不安全的SSL連接。如果不打開,站點(diǎn)證書過期的https將無法訪問
        wc.getOptions().setJavaScriptEnabled(true); //啟用JS解釋器
        wc.getOptions().setCssEnabled(false); //禁用css支持
        // 禁用一些異常拋出
        wc.getOptions().setThrowExceptionOnScriptError(false);
        wc.getOptions().setThrowExceptionOnFailingStatusCode(false);

        wc.getOptions().setDoNotTrackEnabled(false); // 隨請求發(fā)送DoNotTrack
        wc.setJavaScriptTimeout(1000);      // 設(shè)置JS超時,這里是1s
        wc.getOptions().setTimeout(5000); //設(shè)置連接超時時間 ,這里是5s。如果為0,則無限期等待
        wc.setAjaxController(new NicelyResynchronizingAjaxController()); // 設(shè)置ajax控制器
        
        return wc;
    }

淘寶詳情抓取:
分析淘寶的頁面,商品詳情是異步從cdn加載的,我們只要找到這個cdn的url,直接請求獲取response即可。

    public String getTaobaoDetail(String url) {
        WebClient wc = newWebClient();
        
        String detail = "";

        try {
            WebRequest request = new WebRequest(UrlUtils.toUrlUnsafe(url));
            request.setAdditionalHeaders(searchRequestHeader);

            Page page = wc.getPage(request);

            if(page.isHtmlPage()) {
                HtmlPage htmlPage = (HtmlPage) page;

                String html = htmlPage.asXml();
                               DomNodeList script = htmlPage.getHead().getElementsByTagName("script");
                String detailUrl = "";
                for(HtmlElement elm : script) {
                    String textContent = elm.getTextContent();
                    if(textContent.contains("var g_config = {")) {
                        for(String line : textContent.split("
")) {
                            if(line.startsWith("        descUrl")) {
                                detailUrl = "http:" + RegexUtil.getFirstMatch(line,
                                        ""http://dsc.taobaocdn.com/i[0-9]+/[0-9]+/[0-9]+/[0-9]+/.+[0-9]+"s+:"
                                ).replaceAll("s+:","").replace(""","");
                                break;
                            }

                        }
                        break;
                    }
                }
                if(StringUtils.isNotBlank(detailUrl))
                detail = wc.getPage(detailUrl).getWebResponse().getContentAsString().replace("var desc="","").replace("";","");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            wc.close();
        }
        return detail;
    }
        
    public static String getFirstMatch(String str,String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        String ret = null;
        if(matcher.find()) {
            ret = matcher.group();
        }
        return ret;
    }

天貓詳情抓取:
淘寶天貓是截然兩種風(fēng)格,沒找到像淘寶詳情頁一樣的cdn地址,只能從頁面上去抓取了。
使用js模擬滾動,然后等待js執(zhí)行完畢。至于多久真的看RP。。。

    public String getTmallDetail(String url) {
        WebClient wc = newWebClient();

        String detail = "";

        try {
            WebRequest request = new WebRequest(UrlUtils.toUrlUnsafe(url));

            request.setAdditionalHeaders(searchRequestHeader);

            wc.getCurrentWindow().getTopWindow().setOuterHeight(Integer.MAX_VALUE);
            wc.getCurrentWindow().getTopWindow().setInnerHeight(Integer.MAX_VALUE);

            Page page = wc.getPage(request);
            page.getEnclosingWindow().setOuterHeight(Integer.MAX_VALUE);
            page.getEnclosingWindow().setInnerHeight(Integer.MAX_VALUE);

            if(page.isHtmlPage()) {
                HtmlPage htmlPage = (HtmlPage) page;
                ScriptResult sr = htmlPage.executeJavaScript(String.format("javascript:window.scrollBy(0,%d);",Integer.MAX_VALUE));
                // 執(zhí)行頁面所有渲染相關(guān)的JS
                int left = 0;
                do {
                    left = wc.waitForBackgroundJavaScript(10);
//                    System.out.println(left);
                } while (left > 7); // 有6-7個時間超長的js任務(wù)

                htmlPage = (HtmlPage)sr.getNewPage();
                detail = htmlPage.getElementById("description").asXml()
                        .replaceAll("src="http://.{0,100}.png" data-ks-lazyload=", "src=");  // 移除懶加載
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            wc.close();
        }
        return detail;
    }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66625.html

相關(guān)文章

  • Python3中級玩家:淘寶天貓商品搜索爬蟲自動化工具(第一篇)

    摘要:這就是我們第一個核心函數(shù)代碼,后面還有很多個喔明天待續(xù)中級玩家淘寶天貓商品搜索爬蟲自動化工具第二篇等不及,請武裝 查看·Github 使用Golang重構(gòu)PC版本搜索框:https://github.com/hunterhug/... 一、前言 大家好,今天我要來講講一個比較實(shí)用的爬蟲工具,抓取淘寶的關(guān)鍵字商品信息,即是: showImg(https://segmentfault.co...

    oliverhuang 評論0 收藏0
  • Python網(wǎng)頁信息采集:使用PhantomJS采集淘寶天貓商品內(nèi)容

    摘要:,引言最近一直在看爬蟲框架,并嘗試使用框架寫一個可以實(shí)現(xiàn)網(wǎng)頁信息采集的簡單的小程序。本文主要介紹如何使用結(jié)合采集天貓商品內(nèi)容,文中自定義了一個,用來采集需要加載的動態(tài)網(wǎng)頁內(nèi)容。 showImg(https://segmentfault.com/img/bVyMnP); 1,引言 最近一直在看Scrapy 爬蟲框架,并嘗試使用Scrapy框架寫一個可以實(shí)現(xiàn)網(wǎng)頁信息采集的簡單的小程序。嘗試...

    z2xy 評論0 收藏0

發(fā)表評論

0條評論

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