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

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

?? fetcher.java

?? 爬蟲數據的改進,并修正了一些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亚洲精华国产精华精华液| 午夜视频久久久久久| 亚洲麻豆国产自偷在线| 国产精品人人做人人爽人人添| 国产欧美一区二区三区网站| 国产三级一区二区| 中文字幕欧美国产| 国产蜜臀av在线一区二区三区| 久久精品欧美一区二区三区麻豆| 久久久亚洲国产美女国产盗摄 | 日韩视频一区二区| 日韩欧美一级二级三级| 日韩欧美国产电影| 2023国产精华国产精品| 久久精子c满五个校花| 中文字幕一区二区三中文字幕| 中文字幕一区二区三区在线观看| 亚洲三级在线免费| 亚洲一二三四在线| 免费的国产精品| 国产成人精品一区二区三区四区| www.综合网.com| 色偷偷成人一区二区三区91| 欧美日韩在线播放三区四区| 欧美放荡的少妇| 2024国产精品视频| 自拍偷在线精品自拍偷无码专区| 一级日本不卡的影视| 免费亚洲电影在线| 国产大陆亚洲精品国产| 91一区二区三区在线观看| 欧美日韩精品专区| 久久女同性恋中文字幕| 亚洲欧洲另类国产综合| 午夜影院在线观看欧美| 国产精品一色哟哟哟| 91丨九色porny丨蝌蚪| 欧美二区三区91| 国产亚洲制服色| 亚洲综合色噜噜狠狠| 麻豆精品精品国产自在97香蕉| 国产成人一级电影| 欧美亚洲丝袜传媒另类| 欧美精品一区二区不卡| 亚洲黄色av一区| 九九精品视频在线看| 91麻豆国产自产在线观看| 欧美一级日韩不卡播放免费| 欧美国产一区二区在线观看| 亚洲五月六月丁香激情| 国产精品综合视频| 欧美午夜电影在线播放| 国产婷婷色一区二区三区四区| 亚洲最大的成人av| 国产麻豆视频一区| 欧洲av在线精品| 国产亚洲女人久久久久毛片| 亚洲国产色一区| 国产黑丝在线一区二区三区| 欧美丰满美乳xxx高潮www| 中文字幕在线免费不卡| 久久国产精品区| 欧美在线免费播放| 中文字幕免费不卡| 麻豆成人免费电影| 欧美优质美女网站| 欧美国产精品专区| 精品一区二区免费视频| 欧美日韩在线亚洲一区蜜芽| 国产精品久久久久一区二区三区 | 国产一区二区导航在线播放| 色婷婷av一区二区三区gif| 久久亚洲精华国产精华液| 亚洲国产综合91精品麻豆| 菠萝蜜视频在线观看一区| 欧美精品一区二区三区在线 | 国产激情视频一区二区三区欧美 | 中文字幕一区免费在线观看| 国产一区二区剧情av在线| 在线成人免费视频| 亚洲自拍偷拍图区| 91免费版在线| 国产精品青草综合久久久久99| 卡一卡二国产精品| 在线综合+亚洲+欧美中文字幕| 亚洲精品日韩综合观看成人91| 粉嫩av一区二区三区在线播放 | 国产一区二区三区在线观看免费 | 国产一区二区三区久久悠悠色av| 欧美一区二区三区四区在线观看| 亚洲综合色噜噜狠狠| 91性感美女视频| 国产精品美女一区二区三区| 国产美女精品在线| 久久视频一区二区| 精品一区二区三区蜜桃| 日韩一二三区不卡| 日韩av不卡在线观看| 在线成人午夜影院| 日韩高清不卡一区二区三区| 777奇米四色成人影色区| 亚洲国产一区二区三区| 欧美在线观看一区二区| 亚洲一级二级三级| 欧美日韩国产高清一区二区三区 | 337p粉嫩大胆色噜噜噜噜亚洲| 免费在线观看成人| 欧美精品一区二区三区高清aⅴ| 男女男精品视频| 日韩免费视频一区二区| 久久99热99| 久久免费国产精品| 成人在线综合网站| 国产精品久久久久婷婷二区次| eeuss影院一区二区三区| 国产精品国产成人国产三级| aaa欧美大片| 一区二区激情小说| 69堂国产成人免费视频| 久88久久88久久久| 亚洲国产精品99久久久久久久久| 国产99久久久久| 亚洲免费视频成人| 欧美视频在线一区| 青青草视频一区| 久久久亚洲国产美女国产盗摄| 成人国产精品免费| 一二三四区精品视频| 欧美男同性恋视频网站| 久久se这里有精品| 国产精品免费av| 欧美亚洲精品一区| 看电视剧不卡顿的网站| 国产精品色哟哟| 欧美视频在线不卡| 极品少妇xxxx精品少妇偷拍| 国产蜜臀av在线一区二区三区| 色老综合老女人久久久| 日韩高清国产一区在线| 国产欧美日韩三区| 欧美性猛交xxxx乱大交退制版| 久久电影国产免费久久电影| 国产精品理伦片| 欧美日产国产精品| 国产不卡在线一区| 亚洲小说欧美激情另类| 久久久亚洲国产美女国产盗摄 | 亚洲天堂中文字幕| 欧美一区二区视频在线观看| 成人美女视频在线观看18| 亚洲国产综合色| 国产精品系列在线| 91精选在线观看| 91视频精品在这里| 经典三级一区二区| 亚洲一区二区三区四区五区中文 | 亚洲精品成人悠悠色影视| 欧美一区二区二区| 91亚洲精品久久久蜜桃网站 | 欧美一区二区三区色| 国产成+人+日韩+欧美+亚洲| 日韩精品亚洲一区二区三区免费| 国产日本一区二区| 7878成人国产在线观看| 日本女人一区二区三区| 国产欧美一二三区| 91亚洲精品一区二区乱码| 国产在线精品一区二区夜色| 亚洲欧洲韩国日本视频| 制服丝袜国产精品| 色八戒一区二区三区| 免费成人在线观看视频| 亚洲视频资源在线| 欧美一区二区在线免费观看| www.亚洲色图.com| 日韩成人免费看| 久久免费看少妇高潮| 日韩一区二区高清| 色综合久久久久久久| 久久99蜜桃精品| 蜜桃免费网站一区二区三区| 亚洲激情图片小说视频| 久久午夜羞羞影院免费观看| 成人av在线播放网址| 琪琪一区二区三区| 亚洲精品视频观看| 日韩欧美色电影| 91精品国产免费久久综合| 不卡视频在线看| 激情五月激情综合网| 蜜臀av一区二区三区| 亚洲与欧洲av电影| 国产欧美日本一区二区三区| 538在线一区二区精品国产| 不卡在线视频中文字幕| 久久97超碰色| 蜜臀va亚洲va欧美va天堂| 亚洲妇女屁股眼交7| 亚洲国产精品精华液2区45|