完璧なターゲット:
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_firstchapter、self.name_txt
4、(下/ xbiqugeに/ルートディレクトリ)クローラを実行する:scrapy runspider xbiquge /スパイダー/ xueba.py
実行が完了すると、あなたは(/ルート/ xbiquge)は、現在のディレクトリに結果として新しいTXTファイルを見るためにすることができます。爬虫類、実行、デバッグ情報が/root/xbiquge/myspiders.log内で表示することができます。