★関連記事
・CentOS環境の python3.6(pyenv環境)で Scrapy を利用してみる(Scrapy その1)
・Scrapyでデータ取得でクローリングで取得したURLから検索する(Scrapy その2)
・CentOS7でscrapy-splashを使ってJavaScriptの解析(Scrapy その3)
・CentOS7でscrapy-splashを使ってJavaScriptの解析 その2(Scrapy その5)
Scrapyでデータの保存先をmongodbにしてみます。
mongodbのインストールはこちらから。
・CentOS7系でmongodb4.0のインストール
scrapyでmongodbを接続するのに便利なライブラリをインストールします。
1 2 3 |
# pip install scrapy-mongodb |
設定は「settings.py」に以下を設定するだけとなります。
1 2 3 4 5 6 7 8 9 |
ITEM_PIPELINES = { 'scrapy_mongodb.MongoDBPipeline': 800, } MONGODB_URI = 'mongodb://localhost:27017' MONGODB_DATABASE = 'scrapy-test' MONGODB_COLLECTION = 'items' |
この設定だけで結果の保存をmongodbに実施してくれます。
Scrapyの設定はシンプルに実施しています。
1 2 3 4 5 6 7 8 |
# -*- coding: utf-8 -*- import scrapy class SampleCrawlerItem(scrapy.Item): title = scrapy.Field() url = scrapy.Field() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# -*- coding: utf-8 -*- import scrapy from sample_crawler.items import SampleCrawlerItem class TestSpider(scrapy.Spider): name = 'test' allowed_domains = ['developer-collaboration.com'] start_urls = ['http://developer-collaboration.com/'] def parse(self, response): for quote in response.css('article.post-list'): item = SampleCrawlerItem() item['title'] = quote.css('h1.entry-title::text').extract_first() item['url'] = quote.css('a::attr(href)').extract_first() yield item |
こちらでscapyを起動します。
1 2 3 |
# scrapy crawl test |
無事以下のような行のログが出ています。
1 2 3 4 5 |
2018-12-16 10:17:52 [scrapy.core.scraper] DEBUG: Scraped from <200 http://developer-collaboration.com/> {'title': 'kibana \u3068 Beats \uff08metricbeat\uff09\u3092\u4f7f\u3063\u3066\u30b5\u30fc\u30d0\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c7\u30fc\u30bf\u3092\u53ef\u8996\u5316\u3059\u308b', 'url': 'https://developer-collaboration.com/2018/10/28/kibana-metricbeats01/', '_id': ObjectId('5c15a7c0707b702803529e07')} 2018-12-16 10:17:52 [scrapy-mongodb-pipeline] DEBUG: Stored item(s) in MongoDB scrapy-test/items |
折角なので結果をmongodb側で確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# mongo > show dbs admin 0.000GB config 0.000GB local 0.000GB scrapy-test 0.000GB > use scrapy-test switched to db scrapy-test > show collections items > db.items.find() { "_id" : ObjectId("5c15a7c0707b702803529dff"), "title" : "CentOS7系でmongodb4.0のインストール", "url" : "https://developer-collaboration.com/2018/12/15/centos7-mongodb4-0-install/" } { "_id" : ObjectId("5c15a7c0707b702803529e00"), "title" : "CentOS7でscrapy-splashを使ってJavaScriptの解析(Scrapy その3)", "url" : "https://developer-collaboration.com/2018/12/14/scrapy-splash3/" } { "_id" : ObjectId("5c15a7c0707b702803529e01"), "title" : "Scrapyでデータ取得でクローリングで取得したURLから検索する(Scrapy その2)", "url" : "https://developer-collaboration.com/2018/12/12/scrapy2/" } { "_id" : ObjectId("5c15a7c0707b702803529e02"), "title" : "SublimeText3でリモートのサーバ上にあるファイルを開いたり編集したりする", "url" : "https://developer-collaboration.com/2018/12/10/sublimetext3/" } { "_id" : ObjectId("5c15a7c0707b702803529e03"), "title" : "CentOS環境の python3.6(pyenv環境)で Scrapy を利用してみる(Scrapy その1)", "url" : "https://developer-collaboration.com/2018/12/07/centos-python3-6-scrapy-install/" } { "_id" : ObjectId("5c15a7c0707b702803529e04"), "title" : "Google Cloud Platform を Cloud SDKで設定(CentOS7)", "url" : "https://developer-collaboration.com/2018/11/13/google-cloud-platform-cloud-sdk-centos/" } { "_id" : ObjectId("5c15a7c0707b702803529e05"), "title" : "curlでSSL接続しようとすると「curl: (35) SSL connect error」のエラーが出た", "url" : "https://developer-collaboration.com/2018/11/08/curl-ssl-error/" } { "_id" : ObjectId("5c15a7c0707b702803529e06"), "title" : "Railsアプリの CentOS7 + nginx 環境を 無料 の SSL 「Let’s Encrypt」でSSL化", "url" : "https://developer-collaboration.com/2018/11/05/lets-encrypt-nginx-centos7-rails/" } { "_id" : ObjectId("5c15a7c0707b702803529e07"), "title" : "kibana と Beats (metricbeat)を使ってサーバのパフォーマンスデータを可視化する", "url" : "https://developer-collaboration.com/2018/10/28/kibana-metricbeats01/" } { "_id" : ObjectId("5c15a7c0707b702803529e08"), "title" : "「outlook.jp」や「hotmail.co.jp」宛のメールがエラーになった時の対応", "url" : "https://developer-collaboration.com/2018/10/27/outlook-jp-mail-error/" } > db.items.find({"title":"CentOS7系でmongodb4.0のインストール"}) { "_id" : ObjectId("5c15a7c0707b702803529dff"), "title" : "CentOS7系でmongodb4.0のインストール", "url" : "https://developer-collaboration.com/2018/12/15/centos7-mongodb4-0-install/" } |
無事登録されていました。
この状態だと複数のデータを入れてしまうため、URLなどで一意のキーを設定し、ユニークインデックスを設定することでデータの重複などを防ぐこともできます。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。