サイトアイコン てくてくぷれいす

「Pythonクローリング&スクレイピング 」のMongoDB周りのエラーを対処する

こんにちは,しまさん(@shimasan0x00)です.

Pythonを本格的に触り始めてからというものエラーによる嵐に苛まれています.

今回は『Pythonクローリング&スクレイピング ―データ収集・解析のための実践開発ガイド』においてMongodb周りのエラーが多々ありましたので対処したいと思います.

なお,誤植やライブラリの仕様変更における変更なんかは以下のページを見てください.

環境

macOS Mojave(10.14)

pyenv Python3.6.7

pymongo 3.7.2

MongoDB shell version v4.0.3

スポンサーリンク

Mongodbのインストール

macの場合はHomebrewでインストールできます.

brew install mongodb

p84でインストールしたあとに

mkdir -p /data/db

としてそのままMongoDB動かそうとしてますけど起動しません.

以下のコマンドも実行しましょう.

sudo chown -R $USER /data/db

スポンサーリンク

Mongodbの起動・終了

書籍ではフォアグラウンドで起動させるために

mongodb

としています.

ですがbrewでインストールしているかたは

brew service start mongodb #start
brew service stop mongodb #end

でも操作できますので覚えておくといいかもしれません.

YouTube APIを利用してMongodbに保存するプログラム

p151〜にあるサンプルプログラムでエラーが起きました.

save_youtube_video_metadata.pyです.

pymongo.errors.BulkWriteError: batch op errors occurred

エラーをよく見ると以下のあたりでエラーが起きているとのことです.

save_to_mongodb(collection, items_per_page)
result = collection.insert_many(items)

どうすれば…と思ったらstackoverflowにいい感じのものがありました.

I want to insert_many() documents in my collection. Some of them may have the same key/value pair (screen_name in my example) than existing documents inside the collection. I have a unique index se…
Pymongo : insert_many + unique index – Stack Overflow

insert_many()の引数に「ordered=False」を追加すると解決するときもあるよとのことでした.

なので,

#save_to_mongodb関数

result = collection.insert_many(items, ordered=False)

としてあげて実行すると…

Inserted 50 docments
Inserted 50 docments
Inserted 50 docments
Inserted 50 docments
Inserted 50 docments
29736742 Claudia tira el ipad de Gisele al agua!! By Las Ratitas
19825031 MAGIC IPAD
9451224 Макс РАЗБИЛ ПЛАНШЕТ iPad! Катя ВСЕ ИСПОРТИЛА!
7124290 Introducing the new iPad Pro — Apple
7082669 Ipad In The Swimming Pool Prank On My Sister Sophia!

ちゃんと結果が出ました!!(クエリは’iPad’にしています)

スポンサーリンク

MongoDBのGUIツールの紹介(NoSQLBooster for MongoDB)

NoSQLBooster for MongoDB (formerly MongoBooster) is a shell-centric cross-platform GUI tool for MongoDB v2.6-4.4, which provides fluent query builder, SQL query, update-in-place, ES2017 syntax support, and true intellisense experience. A free edition is available.
NoSQLBooster – The Smartest GUI Tool and IDE for MongoDB – 

無料で使えるGUIツールないかなと思って探したときに見つけたGUIツールです.

DBをこうやって簡単に可視化してくれると理解が深まるのでいいなと思っています.

さいごに

今回は『Pythonクローリング&スクレイピング ―データ収集・解析のための実践開発ガイド』におけるMongoDB周りのエラー解決をしました.

周りの人よりも頻繁にエラーとこんにちはしてる気がしてなりません…笑.

スクレイピングは楽しいので頑張ります!(もうエラー起きないでくれ(無理))

モバイルバージョンを終了