python-爬虫類-scrapy

はじめに:

ダウンロード: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())

 

おすすめ

転載: www.cnblogs.com/person1-0-1/p/11390552.html