亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fetcher.java

?? 爬蟲數(shù)據(jù)的改進,并修正了一些bug
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright (c) 2003 The Nutch Organization.  All rights reserved.   */
/* Use subject to the conditions in http://www.nutch.org/LICENSE.txt. */

package net.nutch.fetcher;

import java.io.IOException;
import java.io.File;
import java.util.Properties;

import net.nutch.pagedb.FetchListEntry;
import net.nutch.io.*;
import net.nutch.db.*;
import net.nutch.fs.*;
import net.nutch.util.*;
import net.nutch.protocol.*;
import net.nutch.parse.*;
import net.nutch.plugin.*;

import java.util.logging.*;

/**
 * The fetcher. Most of the work is done by plugins.
 *
 * <p>
 * Note by John Xing: As of 20041022, option -noParsing is introduced.
 * Without this option, fetcher behaves the old way, i.e., it not only
 * crawls but also parses content. With option -noParsing, fetcher
 * does crawl only. Use ParseSegment.java to parse fetched contents.
 * Check FetcherOutput.java and ParseSegment.java for further description.
 */
public class Fetcher {

  public static final Logger LOG =
    LogFormatter.getLogger("net.nutch.fetcher.Fetcher");

  static {
    if (NutchConf.getBoolean("fetcher.verbose", false)) {
      setLogLevel(Level.FINE);
    }
  }

  private ArrayFile.Reader fetchList;             // the input
  private ArrayFile.Writer fetcherWriter;         // the output
  private ArrayFile.Writer contentWriter;
  private ArrayFile.Writer parseTextWriter;
  private ArrayFile.Writer parseDataWriter;

  private String name;                            // name of the segment
  private long start;                             // start time of fetcher run
  private long bytes;                             // total bytes fetched
  private int pages;                              // total pages fetched
  private int errors;                             // total pages errored

  private boolean parsing = true;                 // whether do parsing

  private int threadCount =                       // max number of threads
    NutchConf.getInt("fetcher.threads.fetch", 10);

  // All threads (FetcherThread or thread started by it) belong to
  // group "fetcher". Each FetcherThread is named as "fetcherXX",
  // where XX is the order it's started.
  private static final String THREAD_GROUP_NAME = "fetcher";

  private ThreadGroup group = new ThreadGroup(THREAD_GROUP_NAME); // our group

  // count of FetcherThreads that are through the loop and just about to return
  private int atCompletion = 0;

  /********************************************
   * Fetcher thread
   ********************************************/
  private class FetcherThread extends Thread {

    public FetcherThread(String name) { super(group, name); }

    /**
     * This thread keeps looping, grabbing an item off the list
     * of URLs to be fetched (in a thread-safe way).  It checks 
     * whether the URL is OK to download.  If so, we do it.
     */
    public void run() {

      FetchListEntry fle = new FetchListEntry();

      while (true) {
        if (LogFormatter.hasLoggedSevere())       // something bad happened
          break;                                  // exit
        
        String url = null;
        try {

          if (fetchList.next(fle) == null)
            break;

          url = fle.getPage().getURL().toString();

          if (!fle.getFetch()) {                  // should we fetch this page?
            if (LOG.isLoggable(Level.FINE))
              LOG.fine("not fetching " + url);
            handleNoFetch(fle, FetcherOutput.SUCCESS);
            continue;
          }

          LOG.info("fetching " + url);            // fetch the page

          Protocol protocol = ProtocolFactory.getProtocol(url);
          Content content = protocol.getContent(url);

          handleFetch(url, fle, content);

          synchronized (Fetcher.this) {           // update status
            pages++;
            bytes += content.getContent().length;
            if ((pages % 100) == 0) {             // show status every 100pp
              status();
            }
          }
        } catch (ResourceGone e) {                // don't retry
          logError(url, fle, e);
          handleNoFetch(fle, FetcherOutput.NOT_FOUND);

        // dealt with in handleFetch() below
        //} catch (ParseException e) {              // don't retry
        //  logError(url, fle, e);
        //  handleNoFetch(fle, FetcherOutput.CANT_PARSE);

        } catch (RetryLater e) {                  // explicit retry
          logError(url, fle, e);
          handleNoFetch(fle, FetcherOutput.RETRY);

        } catch (ProtocolException e) {           // implicit retry
          logError(url, fle, e);
          handleNoFetch(fle, FetcherOutput.RETRY);

        } catch (Throwable t) {                   // an unchecked exception
          if (fle != null) {
            logError(url, fle, t);                // retry?
            handleNoFetch(fle, FetcherOutput.RETRY);
          }
        }
      }

      // Explicitly invoke shutDown() for all possible plugins.
      // Done by the FetcherThread finished the last.
      synchronized (Fetcher.this) {
        atCompletion++;
        if (atCompletion == threadCount) {
          try {
            PluginRepository.getInstance().finalize();
          } catch (java.lang.Throwable t) {
            // do nothing
          }
        }
      }
      return;
    }

    private void logError(String url, FetchListEntry fle, Throwable t) {
      LOG.info("fetch of " + url + " failed with: " + t);
      LOG.log(Level.FINE, "stack", t);            // stack trace
      synchronized (Fetcher.this) {               // record failure
        errors++;
      }
    }

    private void handleFetch(String url, FetchListEntry fle, Content content) {
      if (!Fetcher.this.parsing) {
        outputPage(new FetcherOutput(fle, MD5Hash.digest(content.getContent()),
                                    FetcherOutput.SUCCESS),
                content, null, null);
        return;
      }

      try {
        String contentType = content.getContentType();
        Parser parser = ParserFactory.getParser(contentType, url);
        Parse parse = parser.getParse(content);
        outputPage(new FetcherOutput(fle, MD5Hash.digest(content.getContent()),
                                    FetcherOutput.SUCCESS),
                content, new ParseText(parse.getText()), parse.getData());
      } catch (ParseException e) {
        // 20041026, xing
        // If fetching succeeds, but parsing fails, content should be saved
        // so that we can try to parse again in separate pass, possibly
        // using better/alternative parser.
        LOG.info("fetch okay, but can't parse " + url + ", reason: "
          + e.getMessage());
        outputPage(new FetcherOutput(fle, MD5Hash.digest(content.getContent()),
                                    FetcherOutput.CANT_PARSE),
                content, new ParseText(""),
                new ParseData("", new Outlink[0], new Properties()));
      }
    }

    private void handleNoFetch(FetchListEntry fle, int status) {
      String url = fle.getPage().getURL().toString();
      MD5Hash hash = MD5Hash.digest(url);

      if (Fetcher.this.parsing) {
        outputPage(new FetcherOutput(fle, hash, status),
                   new Content(url, url, new byte[0], "", new Properties()),
                   new ParseText(""),
                   new ParseData("", new Outlink[0], new Properties()));
      } else {
        outputPage(new FetcherOutput(fle, hash, status),
                   new Content(url, url, new byte[0], "", new Properties()),
                   null, null);
      }
    }
      
    private void outputPage(FetcherOutput fo, Content content,
                            ParseText text, ParseData parseData) {
      try {
        synchronized (fetcherWriter) {
          fetcherWriter.append(fo);
          contentWriter.append(content);
          if (Fetcher.this.parsing) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品91久久久中77777| 国产a久久麻豆| jlzzjlzz亚洲日本少妇| 日韩小视频在线观看专区| 亚洲色图一区二区| 国产成人精品一区二| 7777精品伊人久久久大香线蕉超级流畅 | 玖玖九九国产精品| 日本久久一区二区| 国产精品素人一区二区| 久久丁香综合五月国产三级网站| 欧美亚洲图片小说| 国产精品电影一区二区三区| 狠狠色狠狠色综合系列| 91麻豆精品国产| 亚洲韩国精品一区| 色呦呦网站一区| 中文字幕一区在线观看| 国产成人免费视| 精品国产乱码久久久久久1区2区| 肉色丝袜一区二区| 精品视频资源站| 亚洲亚洲精品在线观看| 色综合久久久久网| √…a在线天堂一区| 成人性生交大片免费看在线播放| 久久综合九色综合欧美98| 麻豆成人在线观看| 日韩一二在线观看| 日韩精品成人一区二区在线| 欧美视频三区在线播放| 亚洲一区二三区| 欧美视频一区二区在线观看| 亚洲午夜视频在线| 中文字幕乱码亚洲精品一区| 国产一区二区在线看| 精品国一区二区三区| 另类小说图片综合网| 日韩精品自拍偷拍| 国产自产视频一区二区三区| 久久综合中文字幕| 国内精品久久久久影院薰衣草| 日韩精品自拍偷拍| 国产乱码精品一品二品| 国产欧美久久久精品影院| 国产aⅴ综合色| 国产精品毛片久久久久久| 成人午夜短视频| 国产精品久久久久久户外露出| 成人黄色小视频| 自拍偷自拍亚洲精品播放| 日本韩国精品一区二区在线观看| 一区二区在线观看av| 欧美亚洲国产怡红院影院| 亚洲一区精品在线| 777奇米成人网| 久久99精品国产.久久久久久| 久久久美女毛片| 成人福利电影精品一区二区在线观看| 国产精品国产三级国产aⅴ原创| 91在线一区二区三区| 亚洲成人tv网| 精品对白一区国产伦| 国产成人精品aa毛片| 亚洲男同1069视频| 欧美高清精品3d| 韩国欧美国产1区| 国产精品第13页| 欧美三级日本三级少妇99| 麻豆精品在线看| 国产精品麻豆欧美日韩ww| 欧美伊人久久久久久午夜久久久久| 日韩成人一区二区| 国产欧美精品在线观看| 91久久国产最好的精华液| 日韩精品三区四区| 国产三级欧美三级日产三级99| 99久久国产综合精品色伊| 日日夜夜精品免费视频| 成人精品gif动图一区| 亚洲欧洲av在线| 欧美电影一区二区| 国产乱码字幕精品高清av| 亚洲天堂免费在线观看视频| 91精品国产综合久久久久久久久久| 狠狠色丁香婷婷综合久久片| **欧美大码日韩| 欧美一区二区免费观在线| 不卡av免费在线观看| 日韩福利视频网| 国产精品久线观看视频| 欧美精品久久久久久久久老牛影院| 韩国中文字幕2020精品| 亚洲精品免费在线观看| 日韩三级在线免费观看| 色婷婷久久综合| 国内精品伊人久久久久av影院| 亚洲欧美日本韩国| 久久久久久亚洲综合影院红桃| 欧洲一区在线观看| 高清不卡一二三区| 日本不卡不码高清免费观看| 1024成人网| 久久久久久9999| 正在播放亚洲一区| 99久久久久免费精品国产| 免费高清在线一区| 一区二区三区四区乱视频| 精品国产一区二区三区av性色| 色婷婷久久久久swag精品 | 91精品婷婷国产综合久久竹菊| 色拍拍在线精品视频8848| 久久成人免费网| 一区二区三区在线播| 国产欧美一区二区在线观看| 51久久夜色精品国产麻豆| 色综合久久综合网| 国产成人a级片| 天堂蜜桃一区二区三区| 亚洲男人的天堂网| 欧美国产亚洲另类动漫| 欧美大胆人体bbbb| 69av一区二区三区| 欧美性生交片4| 成人福利在线看| 国产黄色精品视频| 久久国产精品99精品国产| 天堂一区二区在线| 亚洲午夜一区二区三区| 亚洲精品视频免费看| 国产欧美视频一区二区| 日韩欧美黄色影院| 在线91免费看| 欧美在线观看视频一区二区| a美女胸又www黄视频久久| 粉嫩av一区二区三区在线播放 | 中文字幕亚洲不卡| 国产三区在线成人av| 日韩欧美亚洲国产另类| 色婷婷激情综合| 99久精品国产| 91在线视频网址| 99精品欧美一区二区蜜桃免费| 亚洲一区二区黄色| 国产精品超碰97尤物18| 国产三级一区二区三区| 26uuu欧美| 精品久久久久99| 欧美大片一区二区| 精品久久久久香蕉网| 精品剧情在线观看| 欧美精品一区男女天堂| 精品国内二区三区| 久久综合九色综合欧美就去吻| 精品久久久久久久久久久久包黑料 | 亚洲激情av在线| 亚洲精品免费播放| 一区二区三区精品在线| 亚洲激情六月丁香| 亚洲成人自拍一区| 视频一区视频二区中文| 日本不卡123| 精品一区二区三区在线视频| 激情欧美一区二区| 国产一区999| www.日韩av| 欧洲生活片亚洲生活在线观看| 欧美亚洲动漫另类| 欧美日韩不卡视频| 日韩免费高清视频| 久久久久久97三级| 国产精品国产三级国产普通话99| 亚洲色图制服丝袜| 亚洲成人久久影院| 日韩成人伦理电影在线观看| 久色婷婷小香蕉久久| 国产电影一区二区三区| 成人av动漫在线| 欧美亚洲综合在线| 日韩一区二区三| 国产欧美1区2区3区| 欧美韩国日本一区| 国产精品久久影院| 亚洲在线视频免费观看| 日日骚欧美日韩| 国产一区二区三区在线观看精品 | 久久激五月天综合精品| 国产精一区二区三区| 91视频.com| 欧美精品18+| 久久色视频免费观看| 中文字幕视频一区| 午夜精品久久久久久| 国产一区二区三区电影在线观看| www.66久久| 91精品国产综合久久香蕉的特点 | 国产精品国产a| 亚洲成人精品影院| 国产精品一级片| 欧美午夜在线观看|