クモ
説明:このプロジェクトは、クローラPYファイルを作成することです
#クロールタスクとどのページから構造化データを抽出することを実行する方法を含む。1、クラス一連のクモ(URL又はURLの定義されたセットをクロールする)組成物。 #あなたは、特定のURLまたはURLのセットのための行動をクロールし、解析するページをカスタマイズどこ言い換えれば2、クモがあります
蜘蛛の意志サイクルは、いくつかのことを次の
#1、最初のクロールが最初にURLを要求し、識別コールバック関数を生成するための 最初の要求を(start_requestsに定義されている)デフォルトリストstart_urlsリクエスト要求が発生したから取得したURLアドレス内のメソッドは、デフォルトのコールバック関数は、解析され方法。コールバック関数が自動的にダウンロードが完了し、リターン応答であるときにトリガーされる #2、コールバック関数、解析し、応答を返す値は :値は4種類のかもしれ返され 、解析されたデータディクショナリ含ま Itemオブジェクト (新しい要求がコールバックを指定する必要が新しいRequestオブジェクトを) または反復可能オブジェクト(アイテムまたは要求を含む) #3、コールバック関数内のコンテンツを解析するページ は通常Scrapy自身のセレクタを使用しますが、明らかにあなたはまた、あなたが漢で好きなBeutifulsoup、lxmlのか、他の使用を使用することができます。 #4最後に、アイテムオブジェクトは、データベースに永続化され返さ HTTPS://docs.scrapy.org/en/latest/topics/item-pipeline.htmlデータベースに項目パイプラインコンポーネントによって#トピック品目-pipeline) または別のファイルにエクスポート(フィードによって輸出:HTTPS://docs.scrapy.org/en/latest/topics/feed-exports.html #トピック・フィードの輸出)
スパイダーは、5種の合計します:
#1、#scrapy.spiders.Spider scrapy.Spider等同于scrapy.spiders.Spider #2、scrapy.spiders.CrawlSpider #3、scrapy.spiders.XMLFeedSpider #4、scrapy.spiders.CSVFeedSpider #5、scrapy.spiders。 SitemapSpider
インポートの使用
#- * -コーディング:UTF-8 - * - 。 輸入Scrapy から scrapy.spiders インポートスパイダー、CrawlSpider、XMLFeedSpider、CSVFeedSpider、SitemapSpiderの クラス AmazonSpider(scrapy.Spider): #の継承ベースクラスは、くもの提供するカスタムクラス 名を= " アマゾン' allowed_domains = [ ' www.amazon.cn ' ] start_urls = [ ' http://www.amazon.cn/ " ] ` `` DEF パース(セルフ、応答): パス `` `
MongoDBの中に格納されたデータ
pipelinsは、プロセスを使用します。
settings.pyは、取得すべきデータで定義されたモデル項目、データベースに接続pipelins.py、コンテンツデータを書き込むcnblogs.pyクロールを配置しました。
1、項目で記述されたクラスは、モデルのようなフィールドが存在し、ジャンゴ
輸入scrapy #クラスMyscrapyItem(scrapy.Item): # :# のようにここにあなたの項目のフィールドを定義 #の #名= scrapy.Field() #の パス クラスArticleItem(scrapy.Item): article_name = scrapy.Field() article_url = scrapy.Field() auther_name = scrapy.Field() COMMIT_COUNT = scrapy.Field()
2、settings.py、パイプライン設定、優先度に配置されています。
3、pipelines.py
メソッドの束を書いて、データベースへの接続
#-ArticleMongodbPipeline - INIT - from_crawler - open_spider - close_spider - process_item - 対応する書き込みメモリ リターン何かが違う、アイテムならば、次のpipelinsを取得し続けることができ、戻りなしの場合、次のではないのGET # -ArticleFilePipeline
コードの実装:
#- * -コーディング:UTF-8 - * - から pymongo インポートMongoClientの クラスArticleMongodbPipeline(オブジェクト): DEFのprocess_item(セルフ、アイテム、スパイダー): #クライアントMongoClient =( 'のMongoDB:// localhostを:27017 /') #の接続 クライアント= MongoClient(「localhostの」、27017 ) #作成するために呼び出されていない場合は、記事データベースを作成し、そうであれば、使用して呼び出さ デシベルを=クライアント[ 「記事」] #印刷(デシベル) #あなたがarticleinfoを使用している場合は、そうでない場合は、このテーブルを作成します DB = article_info [ ' articleinfo ' ] article_info.insert(辞書(アイテム)) #1 article_info.save({ 'article_name':項目[ 'article_name']、 'aritcle_url':項目[ 'article_url']}) #retrunなし、次の項目は、に失敗しないであろう場合、なしに取られ たクラスArticleFilePipeline(オブジェクト): #DEF __init __(自己、ホスト、ポート): DEF __init__ (セルフ): #self.mongo_conn = MongoClient(ホスト、ポート) パス #このクラスがfrom_crawlerを持っている場合は、最初の実行from_crawler、AA = ArticleFilePipeline.from_crawler(クローラ) #は直接ArticleFilePipelineがない場合= AA()は @classmethod DEF from_crawler(CLS、クローラ): 印刷(' が') #MongoDBの構成情報の設定 #の「設定ファイルからアウト」ホスト= #「設定ファイルから出て」ポート= #crawler.settings全体的なプロファイル を印刷(「asdfasdfasfdasfd 」、crawler.settingsを[ ' AA ' ]) #のリターンCLS(ホスト、ポート) リターンCLS() DEF )自己、スパイダー(open_spider: #の印刷( '----'、spider.custom_settings [ 'AA']) self.f =オープン(' article.txt '、' A ' ) DEF close_spider(セルフ、スパイダー): self.f.近い() 印刷(' クローズクモ' ) DEF process_item(自己、アイテム、クモ): 合格
重複排除
爬虫類は、クロールするたびに重複除外ルールは、複数の爬虫類で共有されなければならない、他の人が登るする必要はありませんが、実装は次のとおりです。
カスタム重複排除ソリューション
ミドルウェアを使用してダウンロード
爬虫類ミドルウェア
信号および構成情報
ブルームフィルタ
分散クロール-scrapy、Redisの
ソースコード解析
実施内部ソースをカプセル化する方法