摘要:有項目需求抓取淘寶天貓的商品詳情。如果為,則無限期等待設置控制器淘寶詳情抓取分析淘寶的頁面,商品詳情是異步從加載的,我們只要找到這個的,直接請求獲取即可。
有項目需求抓取淘寶天貓的商品詳情。琢磨一段時間搞出來了。放出來讓大家參考下。
Maven依賴:
HtmlUnit
org.apache.httpcomponents httpclient 4.5.2 net.sourceforge.htmlunit htmlunit 2.23 httpclient org.apache.httpcomponents
準備工作:
public static BrowserVersion getBrowserVersion() { BrowserVersion bv = BrowserVersion.BEST_SUPPORTED.clone(); // 設置語言,否則不知道傳過來是什么編碼 bv.setUserLanguage("zh_cn"); bv.setSystemLanguage("zh_cn"); bv.setBrowserLanguage("zh_cn"); // 源碼里是寫死Win32的,不知道到生產環境(linux)會不會變,穩妥起見還是硬設 bv.setPlatform("Win32"); return bv; } public static WebClient newWebClient() { WebClient wc = new WebClient(bv); wc.getOptions().setUseInsecureSSL(true); // 允許使用不安全的SSL連接。如果不打開,站點證書過期的https將無法訪問 wc.getOptions().setJavaScriptEnabled(true); //啟用JS解釋器 wc.getOptions().setCssEnabled(false); //禁用css支持 // 禁用一些異常拋出 wc.getOptions().setThrowExceptionOnScriptError(false); wc.getOptions().setThrowExceptionOnFailingStatusCode(false); wc.getOptions().setDoNotTrackEnabled(false); // 隨請求發送DoNotTrack wc.setJavaScriptTimeout(1000); // 設置JS超時,這里是1s wc.getOptions().setTimeout(5000); //設置連接超時時間 ,這里是5s。如果為0,則無限期等待 wc.setAjaxController(new NicelyResynchronizingAjaxController()); // 設置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(); DomNodeListscript = 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; }
天貓詳情抓取:
淘寶天貓是截然兩種風格,沒找到像淘寶詳情頁一樣的cdn地址,只能從頁面上去抓取了。
使用js模擬滾動,然后等待js執行完畢。至于多久真的看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)); // 執行頁面所有渲染相關的JS int left = 0; do { left = wc.waitForBackgroundJavaScript(10); // System.out.println(left); } while (left > 7); // 有6-7個時間超長的js任務 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; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66625.html
摘要:這就是我們第一個核心函數代碼,后面還有很多個喔明天待續中級玩家淘寶天貓商品搜索爬蟲自動化工具第二篇等不及,請武裝 查看·Github 使用Golang重構PC版本搜索框:https://github.com/hunterhug/... 一、前言 大家好,今天我要來講講一個比較實用的爬蟲工具,抓取淘寶的關鍵字商品信息,即是: showImg(https://segmentfault.co...
摘要:,引言最近一直在看爬蟲框架,并嘗試使用框架寫一個可以實現網頁信息采集的簡單的小程序。本文主要介紹如何使用結合采集天貓商品內容,文中自定義了一個,用來采集需要加載的動態網頁內容。 showImg(https://segmentfault.com/img/bVyMnP); 1,引言 最近一直在看Scrapy 爬蟲框架,并嘗試使用Scrapy框架寫一個可以實現網頁信息采集的簡單的小程序。嘗試...
閱讀 2544·2021-10-09 09:44
閱讀 644·2019-08-30 15:44
閱讀 3005·2019-08-29 18:46
閱讀 1142·2019-08-29 18:38
閱讀 565·2019-08-26 10:44
閱讀 2437·2019-08-23 16:07
閱讀 1100·2019-08-23 15:38
閱讀 4112·2019-08-23 14:02