はじめに:
ダウンロード:scrapyをインストールPIP
プロジェクト: scrapy startprojectののプロジェクト名
スパイダー:scrapy genspiderの爬虫類名のURL(// --nolog オプションのログを表示しません)
要約:
永続ストレージ:
1 :ターミナル店:Scrapyクロール-o aaa.text
2:パイプストレージ:商品に至るまで、すなわちオブジェクト{} 保存した後、辞書
3 :open_spider()----> リンクデータベース、close_spider() - > データベースを閉じ、process_item()---> ストレージ
演技のIP:
1つのカスタムミドルウェアのダウンロード
middleware.py --- "
クラスてMyProxy(オブジェクト):
デフprocess一(自己、リクエスト、クモ):
#Ipを要求交換します
request.meta [ 'プロキシ'] = "http://202.112.51.51:8082"
2 ダウンロードしたミドルウェアを開きます
DOWNLOADER_MIDDLEWARES = {
'firstBlood.middlewares.MyProxy':543、
}
ログレベル:
1
ERROR :エラー
WARNING :警告
INFO :一般情報
DEBUG:デバッグ情報(デフォルト)
情報のログレベルを指定します:
設定:LOG_LEVEL = 'エラー'
ファイルを開発するためのログ情報を格納します。
設定:LOG_FILE = 'log.txtという'
2 2パラメータの受け渡し
収率scrapy.Request(URL = URL、コールバック= self.secondParse、メタ= { 'アイテム':ITE
M})
コール:アイテム= response.meta [ 'アイテム']
リクエストパラメータの受け渡し:
ウェイ:によって scrapy.Requests(方法= 'ポスト')
第二の方法:書き換え start_request(自己)メソッドを(推奨)
クラスFanyiSpider(scrapy.Spider):
デフstart_requests(自己):
データ= {
「キロワット」: '犬
}
self.start_urlsでのURLの:
#FormRequestポスト要求送信
収率scrapy.FormRequest(URL = URL、FORMDATA =データ、コールバック= self.parse)
CrawlSpider:
層の数は、典型的にははるかに多層要求方法、または再帰的な方法である --->収率scrapy.Request(URL、コールバック 、メタ)
特別なリクエストの様々なものがあります:
:最初の要求は、(取得要求キュー機能になったURL 、要求し続けて、リストを新しいで新しいページを取得したURL リスト)
インポートScrapy から scrapy.linkextractors インポートLinkExtractor から scrapy.spiders インポートCrawlSpider、ルール・ クラス:CrawlspiderSpider(CrawlSpider) 名 = ' crawlSpider ' start_urlsの = [ ' https://www.qiushibaike.com/text ' ] ルール =(規則(LinkExtractor (= R&LT許可' /テキスト/ページ/ \ D + ')、=コールバック' parse_itemが'、=従っ)真の) '' ' LinkExtractor:設定抽出リンクルール(正規表現) ,:)(=許可設定が可能エキスのURL =(),: XPath構文、リンク抽出に配置ラベルrestrict_xpaths リンクタグ抽出の隣に位置restrict_css =(),: CSSセレクタは、 (=拒否),: URL設定は、(抽出を許可していません。許可)よりも高い優先順位 allow_domains =(),: URLドメインの設定が抽出可能 deny_domains =(),: URLドメインの設定が抽出(allow_domainsより高い優先度)ができない UNIQUE = Trueの,: URL場合、同一の複数の発生のみ保持 URLの始まりと終わりを表し、自動的にスペースを削除し、デフォルトがTrue:真ストリップ=を 「」「 」「」 ルール link_extractor ,: linkExtractorオブジェクト のコールバック=コールバック関数を設定し,:なし フォローアップするかどうかを設定,:フォロー=なし = process_linksをコールバック関数がすべて抽出されたURLを傍受するために、提供することができる,:なし process一=アイデンティティ:コールバック関数はリクエストオブジェクトを傍受するために、提供することができる 「」「 DEF parse_item(セルフ、応答): div_list = response.xpath(」// DIV [ID = "のContent @左"] / DIV ") のための DIV 内div_list: アイテム = PhpmasterItem() 著者 = div.xpath(' ./div/a [2] / H2 /テキスト()' ).extract_first() 項目[ ' 作成者' ] = STR(著者)。ストリップ() #のプリント(著者) 含量 = div.xpath(' ./a [1] / DIV /スパン/テキスト()' ).extract() コンテンツ = '' .join(コンテンツ) アイテム[ ' コンテンツ' ] = STR(コンテンツ).strip() 収量項目
II:ダウンロード IMG img_urlがパイプに到達し、パイプラインのダウンロード(下の要求者)
スパイダー::利回り項目[ 'img_url']
設定:: IMAGES_STORE = './images/'
ピップ::
qiubaipic.settings インポートimages_storeとしてIMAGES_STOREを より scrapy.pipelines.images インポートImagesPipelineの クラス:QiubaipicPipeline(ImagesPipeline)を DEF get_media_requests(自己、項目情報): img_link = " HTTP:" +アイテム[ ' img_linkは' ] 収率(scrapy.Requestをimg_link)
グループ化画像:
DEF FILE_PATH(セルフ、リクエスト、レスポンス=なし、情報= なし): '' 'ない画像保存パスを完了するために、''' img_name = request.url.split(' / ')[ - 1] #のイメージ名 FILE_NAME = request.META [ ' file_nameに' ] #のパス image_guid = file_nameに+ ' / ' + img_name #の価格、世界的に有名な/2560580770.jpgの img_path =のfile_name IMAGES_STORE + + ' / ' #の./image/の世界的に有名な価格/存在している必要があります IF ありませんos.path.exists(img_path): os.makedirs(img_path) プリント(request.url) リターン ' %sの'%(image_guid)
分散型爬虫類:
プロキシのIP プールとUAのプール
プロキシ IP ミドルウェア:
http_list = [] https_list = [] DEF process一(自己、リクエスト、クモ): H = request.url.split(' :' )[0] であれば、H == ' HTTP ' : HTTP = ' のhttp:// ' + random.choice(http_list) もし H == ' HTTPS ' : HTTP = ' https://で' + random.choice(https_list) request.meta [ ' プロキシ'] =のhttp
UA ミドルウェア:
= user_agent_list [] DEF process一(セルフ、リクエスト、スパイダー): #ランダム値UAのリストから選択された UAは = random.choice(user_agent_list) #4 UA電流値UA要求が書き込み動作傍受 要求を.headers.setdefault(' User--エージェント'、UA)
スクリプトscrapyのプロジェクト:
新しいプロジェクトの下で xxx.py 。
scrapy インポートCMDLINEの #は、私たちがscrapyダイレクトコマンド実行を支援 cmdline.executeを(' scrapyクロールlogrule --nolog ' .split())