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

資訊專欄INFORMATION COLUMN

API例子:用Java/JavaScript下載內(nèi)容提取器

JackJiang / 1202人閱讀

摘要:,引言本文講解怎樣用和使用接口下載內(nèi)容提取器,這是一個(gè)示例程序。具體請(qǐng)參看內(nèi)容提取器的定義。用下載內(nèi)容提取器可以直接跳到第部分的內(nèi)容。

1,引言

本文講解怎樣用Java和JavaScript使用 GooSeeker API 接口下載內(nèi)容提取器,這是一個(gè)示例程序。什么是內(nèi)容提取器?為什么用這種方式?源自Python即時(shí)網(wǎng)絡(luò)爬蟲開(kāi)源項(xiàng)目:通過(guò)生成內(nèi)容提取器,大幅節(jié)省程序員時(shí)間。具體請(qǐng)參看《內(nèi)容提取器的定義》。

2, 用Java下載內(nèi)容提取器

這是一系列實(shí)例程序中的一個(gè),就目前編程語(yǔ)言發(fā)展來(lái)看,Java實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容提取并不合適,除了語(yǔ)言不夠靈活便捷以外,整個(gè)生態(tài)不夠活躍,可選的類庫(kù)增長(zhǎng)緩慢。另外,要從JavaScript動(dòng)態(tài)網(wǎng)頁(yè)中提取內(nèi)容,Java也很不方便,需要一個(gè)JavaScript引擎。用JavaScript下載內(nèi)容提取器可以直接跳到第3部分的內(nèi)容。

具體實(shí)現(xiàn)

注解:

使用Java類庫(kù) jsoup(1.8.3以上版本),可以很便利、快速的獲取網(wǎng)頁(yè)dom。

通過(guò)GooSeeker API 獲取xslt(參考 1分鐘快速生成用于網(wǎng)頁(yè)內(nèi)容提取的xslt)

使用Java自帶的類TransformerFactory執(zhí)行網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換

源代碼如下:

public static void main(String[] args)
{
    InputStream xslt = null;
    try
    {
        String grabUrl = "http://m.58.com/cs/qiuzu/22613961050143x.shtml"; // 抓取網(wǎng)址
        String resultPath = "F:/temp/xslt/result.xml"; // 抓取結(jié)果文件的存放路徑
        // 通過(guò)GooSeeker API接口獲得xslt
        xslt = getGsExtractor();
        // 抓取網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換結(jié)果文件
        convertXml(grabUrl, xslt, resultPath);
    } catch (Exception e)
    {
        e.printStackTrace();
    } finally
    {
        try
        {
            if (xslt != null)
                xslt.close();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

`/**`
 `* @description dom轉(zhuǎn)換`
 `*/`
public static void convertXml(String grabUrl, InputStream xslt, String resultPath) throws Exception
{
    // 這里的doc對(duì)象指的是jsoup里的Document對(duì)象
    org.jsoup.nodes.Document doc = Jsoup.parse(new URL(grabUrl).openStream(), "UTF-8", grabUrl);
    W3CDom w3cDom = new W3CDom();
    // 這里的w3cDoc對(duì)象指的是w3c里的Document對(duì)象
    org.w3c.dom.Document w3cDoc = w3cDom.fromJsoup(doc);
    Source srcSource = new DOMSource(w3cDoc);
    TransformerFactory tFactory =   TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer(new StreamSource(xslt));
    transformer.transform(srcSource, new StreamResult(new FileOutputStream(resultPath)));
}

`/**`
 `* @description 獲取API返回結(jié)果`
 `*/`
public static InputStream getGsExtractor()
{
    // api接口
    String apiUrl = "http://www.gooseeker.com/api/getextractor";
    // 請(qǐng)求參數(shù)
    Map params = new HashMap();
    params.put("key", "xxx");  // Gooseeker會(huì)員中心申請(qǐng)的API KEY
    params.put("theme", "xxx");  // 提取器名,就是用MS謀數(shù)臺(tái)定義的規(guī)則名
    params.put("middle", "xxx");  // 規(guī)則編號(hào),如果相同規(guī)則名下定義了多個(gè)規(guī)則,需填寫
    params.put("bname", "xxx"); // 整理箱名,如果規(guī)則含有多個(gè)整理箱,需填寫
    String httpArg = urlparam(params);
    apiUrl = apiUrl + "?" + httpArg;
    InputStream is = null;
    try
    {
        URL url = new URL(apiUrl);
        HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
        urlCon.setRequestMethod("GET");
        is = urlCon.getInputStream();
    } catch (ProtocolException e)
    {
        e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    }
    return is;
}

`/**`
 `* @description 請(qǐng)求參數(shù)`
 `*/`
public static String urlparam(Map data)
{
    StringBuilder sb = new StringBuilder();
    for (Map.Entry entry : data.entrySet())
    {
        try
        {
            sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue() + "", "UTF-8")).append("&");
        } catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

返回結(jié)果如下:

3, 用JavaScript下載內(nèi)容提取器

請(qǐng)注意,如果本例的JavaScript代碼是在網(wǎng)頁(yè)上運(yùn)行的,因?yàn)榭缬騿?wèn)題,是無(wú)法實(shí)現(xiàn)非本站網(wǎng)頁(yè)內(nèi)容爬取的。所以,要運(yùn)行在具有特權(quán)的JavaScript引擎上,比如,瀏覽器擴(kuò)展程序、自研的瀏覽器、自己的程序中含有JavaScript引擎等。

本例為了實(shí)驗(yàn)方便,仍然放在網(wǎng)頁(yè)上運(yùn)行,為了繞開(kāi)跨域問(wèn)題,是把目標(biāo)網(wǎng)頁(yè)存下來(lái)并進(jìn)行修改,把JavaScript插入進(jìn)去。這么多人工操作,僅僅是為了實(shí)驗(yàn),正式使用的時(shí)候需要考慮別的手段。

具體實(shí)現(xiàn)

注解:

引用 jQuery 類庫(kù) (jQuery-1.9.0 以上)

為了解決跨域問(wèn)題,把目標(biāo)網(wǎng)頁(yè)預(yù)先保存到硬盤上

在目標(biāo)網(wǎng)頁(yè)中插入JavaScript代碼

使用GooSeeker API,把內(nèi)容提取器下載下來(lái),內(nèi)容提取器是一個(gè)xslt程序,下例使用了jQuery的ajax方法從api獲得xslt

用xslt處理器作內(nèi)容提取

下面是源代碼:

// 目標(biāo)網(wǎng)頁(yè)網(wǎng)址為http://m.58.com/cs/qiuzu/22613961050143x.shtml,預(yù)先保存成本地html文件,并插入下述代碼
$(document).ready(function(){
    $.ajax({
        type: "get", 
        url: "http://www.gooseeker.com/api/getextractor?key=申請(qǐng)的appKey&theme=規(guī)則主題名", 
        dataType: "xml", 
        success: function(xslt)
            {
            var result = convertXml(xslt, window.document);
            alert("result:" + result);
        } 
    });  
});

/* 用xslt將dom轉(zhuǎn)換為xml對(duì)象 */
function convertXml(xslt, dom)
{
    // 定義XSLTProcessor對(duì)象
    var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xslt);
    // transformToDocument方式
    var result = xsltProcessor.transformToDocument(dom);
    return result;
}

返回結(jié)果截圖如下

4,展望

同樣可以用Python來(lái)獲取指定網(wǎng)頁(yè)內(nèi)容,感覺(jué)Python的語(yǔ)法更加簡(jiǎn)潔,后續(xù)增加Python語(yǔ)言的示例,有興趣的小伙伴可以加入一起研究。

5,相關(guān)文檔

1, Python即時(shí)網(wǎng)絡(luò)爬蟲:API說(shuō)明

6,集搜客GooSeeker開(kāi)源代碼下載源

1, GooSeeker開(kāi)源Python網(wǎng)絡(luò)爬蟲GitHub源

7,文檔修改歷史

1,2016-06-24:V1.0

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

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

相關(guān)文章

  • API例子Python驅(qū)動(dòng)Firefox采集網(wǎng)頁(yè)數(shù)據(jù)

    摘要:開(kāi)源即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目將與基于的異步網(wǎng)絡(luò)框架集成,所以本例將使用采集淘寶這種含有大量代碼的網(wǎng)頁(yè)數(shù)據(jù),但是要注意本例一個(gè)嚴(yán)重缺陷用加載網(wǎng)頁(yè)的過(guò)程發(fā)生在中,破壞了的架構(gòu)原則。 showImg(https://segmentfault.com/img/bVyzAX); 1,引言 本文講解怎樣用Python驅(qū)動(dòng)Firefox瀏覽器寫一個(gè)簡(jiǎn)易的網(wǎng)頁(yè)數(shù)據(jù)采集器。開(kāi)源Python即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目將與S...

    Harriet666 評(píng)論0 收藏0
  • 快速制作規(guī)則及獲取規(guī)則提取API

    摘要:也就是用可視化的集搜客爬蟲軟件針對(duì)亞馬遜圖書商品頁(yè)做一個(gè)采集規(guī)則,并結(jié)合規(guī)則提取器抓取網(wǎng)頁(yè)內(nèi)容。安裝集搜客爬蟲軟件前期準(zhǔn)備進(jìn)入集搜客官網(wǎng)產(chǎn)品頁(yè)面,下載對(duì)應(yīng)版本。 showImg(https://segmentfault.com/img/bVEFvL?w=300&h=300); 1. 引言 前面文章的測(cè)試案例都用到了集搜客Gooseeker提供的規(guī)則提取器,在網(wǎng)頁(yè)抓取工作中,調(diào)試正則表達(dá)...

    itvincent 評(píng)論0 收藏0
  • Python即時(shí)網(wǎng)絡(luò)爬蟲:API說(shuō)明

    摘要:用于數(shù)據(jù)分析和數(shù)據(jù)挖掘的網(wǎng)絡(luò)爬蟲程序中,內(nèi)容提取器是影響通用性的關(guān)鍵障礙,如果這個(gè)提取器是從獲得的,您的網(wǎng)絡(luò)爬蟲程序就能寫成通用的框架。,相關(guān)文檔,即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目?jī)?nèi)容提取器的定義,集搜客開(kāi)源代碼下載源,開(kāi)源網(wǎng)絡(luò)爬蟲源,文檔修改歷史, showImg(https://segmentfault.com/img/bVynLk); API說(shuō)明——下載gsExtractor內(nèi)容提取器 1,接口...

    genefy 評(píng)論0 收藏0
  • 讓Scrapy的Spider更通

    摘要:而分配任務(wù)的是會(huì)員中心的爬蟲羅盤,實(shí)現(xiàn)集中管理分布執(zhí)行。開(kāi)源即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目同樣也要盡量實(shí)現(xiàn)通用化。網(wǎng)址和提取規(guī)則本來(lái)應(yīng)該硬編碼到中的,現(xiàn)在隔離出來(lái),由會(huì)員中心進(jìn)行管理,那么就很容易做通用了。 showImg(https://segmentfault.com/img/bVyEnS); 1,引言 《Scrapy的架構(gòu)初探》一文所講的Spider是整個(gè)架構(gòu)中最定制化的一個(gè)部件,Spider...

    MartinDai 評(píng)論0 收藏0
  • Python即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目: 內(nèi)容提取的定義(Python2.7版本)

    摘要:然而,和是有區(qū)別的,即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目?jī)?nèi)容提取器的定義一文的源碼無(wú)法在下使用,本文將發(fā)布一個(gè)的內(nèi)容提取器。 1. 項(xiàng)目背景 showImg(https://segmentfault.com/img/bVz5hX); 在Python即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目啟動(dòng)說(shuō)明中我們討論一個(gè)數(shù)字:程序員浪費(fèi)在調(diào)測(cè)內(nèi)容提取規(guī)則上的時(shí)間太多了(見(jiàn)上圖),從而我們發(fā)起了這個(gè)項(xiàng)目,把程序員從繁瑣的調(diào)測(cè)規(guī)則中解放出來(lái),投...

    xuxueli 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<