さらに向上させるための「学習scrapyフレームワーク登るフィクション」

完璧なターゲット:

1、使いやすさのために、新たなアルファベットや英語、中国語名の小説出力、url変数の最初のセクションでは、さまざまな小説をクロールするために、これらのパラメータを変更します。

2、トラブルシューティングを容易にするための設定ファイル、設定情報記録デバッグログを修正するのsettings.py。

図3は、それが不可能なWebコンテンツが質問にデータテーブルをクロールすること、ページの一部が絵文字のシンボルを持って解決する、文字セットエンコーディングを変更します。

第二に、実装プロセス

1、pipelines.pyファイルを変更します。

(パイソン)[ルート@ localhostのxbiquge]#VI xbiquge / pipelines.py
        ここself.url_firstchapter = "http://www.xbiquge.la/43/43474/19425971.html" #は、新規リンクの第一章ですアドレス。
# - * -コーディング:UTF-8 - * -

ここにあなたの項目パイプライン壁紙定義
#の
DOはITEM_PIPELINESで追加の設定にあなたのパイプラインを忘れないように#を
#参照:https://docs.scrapy.org/en/latest/topics /item-pipeline.html
インポートOS
インポート時間
インポートpymysql
twisted.enterpriseインポートadbapiから
pymysqlインポートカーソルの

クラスXbiqugePipeline(オブジェクト):
    #操作は、データベースを接続することを含む、テーブルの小説を構築する初期化クラスを定義
    :DEF __init __(自己)を
        DBPARAMS =を{
            'ホスト': '127.0.0.1'、
            'ポート':3306、
            「ユーザー」:「ルート」、
            「パスワード」:「パスワード」、
            「データベース」:「小説」、
            「文字セット」:「utf8mb4」#を使用utf8mb4文字セットの絵文字顔文字、誤ったデータを避けるためには、テーブルに格納することができない、これMySQLのUTF8サポートストレージの3つだけのバイト、および一般的な文字は3バイトですが、ので、絵文字発現シンボルは4バイトです。

        }
        Self.conn = pymysql.connect(** DBPARAMS)
        self.cursor = self.conn.cursor()
        self._sql =なし
        self.name_novel =ここでは、英語やピンインフィクションで"heifen" #は、これも名前でありますフィクションストレージテーブルファイル名。
        ここでself.url_firstchapter =「http://www.xbiquge.la/43/43474/19425948.html」#は、小説の最初の章のリンクアドレスです。
        self.name_txt =「妻ナンバーワンブラック粉末」#ここでは小説、という名前の出力ファイルの中国名です。

    #爬虫類開始
    (自己、クモ)open_spider DEF:
        self.createtable()#爬虫开始时先初始化小说存储表
        リターン

    #建表
    デフのCreateTable(自己):
        self.cursor.execute(「ドロップテーブルが存在する場合、 "+ self.name_novel)
        self.cursor.execute("テーブルを作成します"+ self.name_novel +"(符号なしAUTO_INCREMENT整数IDはNOT NULL主キー、URL VARCHAR(50)NOT NULL、preview_page VARCHAR(50)にnext_page VARCHAR(50)、コンテンツTEXT NOT NULL)のcharset = utf8mb4「)
        リターン

    DEF process_item (自己、アイテム、クモ):
        self.cursor.execute(self.sql(項目[ 'URL']、項目[ 'preview_page']、項目[ 'にnext_page']、項目[ 'コンテンツ']))
        自己。 conn.commit()
        の戻り項目

    @property
    defのSQL(自己):
        self._sqlない場合:
            = self._sql "" "
                INSERT INTO" "" + + self.name_novel "" "(ID、URL、preview_page、にnext_page、コンテンツ)の値(NULL、%S、%S、%S、%S)
                " ""
            self._sqlリターン
        リターンself._sqlの

    #1章では、データベースから小説書かれたTXTファイルを取る
    (自己)DEF content2txt:
        (+ self.name_novel "からSELECT COUNT(*)")self.cursor.execute
        record_num = self.cursor。またはfetchAllの()[0] [0]
        印刷(record_num)
        カウント= record_num
        url_c = "\" "+ self.url_firstchapter +" \ ""
        START_TIMEはtime.time =新規の()#抽出物の含有量が走行開始時刻を取得
        = Fオープン(self.name_txt + "TXT" 、モード= 'W'、エンコード=「UTF-8」) #の書き込み小説はTXT組成物を用いてファイル名を開いた
        範囲(カウント)で、私のために:
            sql_c = + "から選択したコンテンツ" + url_c#1 "のURLは=" self.name_novel + 新規な組合せの章では、SQLコマンドを取得します。ここでは、データベースのファイル名の変更する必要があり
            self.cursor.executeを(sql_c)
            record_content_c2a0 = self.cursor.fetchall()[0] [0]#得る小説の章
            record_content = record_content_c2a0.replace(U '\ XA0 '、U '' )特殊文字の除去#\ XC2 \ XA0
            f.write( '\ N-')
            f.write(record_content + '\ N-')
            f.write( '\ N- \ N-')
            セルフ+ sql_n = "からSELECTにnext_page"。 +「URLは=」name_novel + url_c#のSQLコマンドリンクの組み合わせは次の章を取得します。ここでは、データベースのファイル名の変更する必要があります
            (sql_n)self.cursor.executeを
            "url_c = "\" "+ self.cursor.fetchall()[0] [0] +" \" #次の章のリンクアドレスは、次のサイクルの準備ができて、url_cに割り当てられています。
        f.close()
        印刷(time.time() - START_TIME)
        (".TXT" + self.name_txt + "ファイルが生成されました!")を印刷
        リターン

    エンド#爬虫類、TXTファイルを生成するcontent2txtメソッドを呼び出し
    DEF close_spider(セルフ、スパイダー):
        セルフ。 content2txt()
        の戻り

2、クモのファイル:

(パイソン)[ルート@ localhostのxbiquge]#viのxbiquge /スパイダー/ heifen.py#爬虫類ファイルを使用してコピーすることができ、生産するために再びscrapy genspiderコマンドを使用しないでください。

。8 UTF - - *:# - - *コーディング
インポートScrapy
xbiquge.itemsインポートXbiqugeItemから

#このようなscrapyによって生成されたときにgenspider sancun www.xbiquge.laコマンドは異なる新規フェッチ,:クラスSancunSpider(scrapy.Spider)そのような名前を変更することはできません。
    名前=「heifen」#異なる爬虫類は、ここでは別の名前を設定する必要があります。
    = allowed_domains [ 'www.xbiquge.la']
    #start_urls = [ 'http://www.xbiquge.la/10/10489/']

    DEF start_requests(自己):
        start_urls = [「HTTP://www.xbiquge。 'ラ・/ 43/43474 /]です
        :start_urlsでのURLの
            歩留まりscrapy.Request(URL = URL、コールバック= self.parse)

    :DEF解析(自己、応答)
        (DLは、ddをリスト#「)#DL = response.css'関連情報へのセクションリンク抽出
        DLにDDのために:
            self.url_c = "http://www.xbiquge.la" + dd.css( ':: ATTR(HREF)')。エキス()[0]#は、 新規リンクの各部を形成するために組み合わされる
            #print(自己。 url_c)が
            scrapy.Request(self.url_c、コールバック= self.parse_c、dont_filter = TRUE)#yield
            各メソッド呼び出しparse_cについて得られる収量scrapy.Request(self.url_c、コールバック= self.parse_c)モード(収量を生成するため位)チャプターリンク、リンク前、次の章へのリンクや
セクション情報。
            #Print(self.url_c)
    DEF parse_c(セルフ、応答):
        項目= XbiqugeItem()
        項目[ 'URL'] = response.urlの
        項目[ 'preview_page'] = "http://www.xbiquge.la"レスポンス+ .css( 'DIV .bottem1 A :: ATTR(HREF)')。抽出物()[1]
        項[ 'にnext_page'] = "http://www.xbiquge.la" + response.css(「DIV .bottem1 A ::
        = response.cssタイトル( 'テキストcon_top ::。')エキス()[4]。
        内容response.css =( '#::テキストコンテンツ')エキス()。
        テキスト= ''
        コンテンツ内の内容について:
            テキスト= +コンテンツテキスト
        #Print(テキスト)
        項目[ 'コンテンツ'] = +タイトル"\ N-" + text.replace( '\ 15'、 '\ N-')#の章は、コンテンツタイトル及びコンテンツデータに合成される、\ 15 ^ M進表現、改行を交換する必要があります。
        Itemオブジェクトのパイプライン出力モジュールへのモード(収率)を生成するアイテム#コンテンツを得ます。

3、設定ファイルを変更します。

  (パイソン)[ルート@ localhostのxbiquge]#VI xbiquge / settings.py

...

ROBOTSTXT_OBEY =偽

...

ITEM_PIPELINES = {
    'xbiquge.pipelines.XbiqugePipeline':300、
}

...

FEED_EXPORT_ENCODING = 'UTF-8'
LOG_LEVEL = 'DEBUG'
LOG_FILEは= './myspiders.log'

4、items.pyファイル:

# - * -コーディング:UTF-8を- * -
あなたの掻き取りのアイテムはこちらモデルを定義します
。#
参照文書で:
#https://docs.scrapy.org/en/latest/topics/items.html
輸入scrapyの
クラスXbiqugeItem(scrapy.Item):
    :#は次のようにここにあなたの項目のためのフィールドを定義
    #名= scrapy.Field()
    のurl = scrapy.Field()
    preview_page = scrapy.Field()
    にnext_page = scrapy.Field()
    コンテンツ= scrapy。フィールド()

第三に、異なるクロール小説の使用:

1、コピークモファイル:CP heifen.py xueba.py

2、変更爬虫類名(名前)新しいクモファイルとディレクトリページのURLアドレス(start_urls):

(1)NAME = 'heifen' 変更名= 'xueba'。

(2)start_urls = [ 'http://www.xbiquge.la/43/43474/'] start_urls = [ 'http://www.xbiquge.la/19/19639/']のように変更

3、変更pipelines.py三つの変数ファイルの内容:self.name_novel、self.url_firstchapterself.name_txt

4、(下/ xbiqugeに/ルートディレクトリ)クローラを実行する:scrapy runspider xbiquge /スパイダー/ xueba.py

実行が完了すると、あなたは(/ルート/ xbiquge)は、現在のディレクトリに結果として新しいTXTファイルを見るためにすることができます。爬虫類、実行、デバッグ情報が/root/xbiquge/myspiders.log内で表示することができます。

おすすめ

転載: www.cnblogs.com/sfccl/p/12055800.html