Python

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

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

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にいい感じのものがありました.

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)

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

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

さいごに

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

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

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

ABOUT ME
しまさん
てくてくぷれいす運営者のしまさんです. 高専→大学編入してから行動的な学生ブロガー? / 自身の変化を求めてブログを6月から開始 / グレープフルーツと本が好き / Distributed SNSやSecurity,プログラミングやVR等のIT系や自身の編入体験談や高専のこと,大学生活を書いてます(たまに小ネタ) / Progateで勉強中