【爬蟲】把抓到資料存起來——爬蟲絕配mongodb

來源:互聯網
上載者:User

標籤:github   none   equal   視頻   bilibili   lse   match   mongo   enc   

【爬蟲】把抓到資料存起來——爬蟲絕配mongodb

視頻地址

抓取資料的方法,前面的課程該講的都已經講了,爬取下來資料只是第一步,第二步就是要先存起來。我們最容易想到的就是存檔案裡嘍,python寫檔案之前的課程也已經講過了。存到檔案裡當然是可以的,但是你是否想過,每次使用都要把整個檔案開啟,然後讀取,實在是有點不geek啊。 
所以我們通常會選擇存進資料庫,方便寫入和讀取資料,並且對於大部分情況而言,python資料結構中的dict足夠我們去結構化抓取的資料,那麼能把兩者發揮到極致的神器就是——mongodb!

mongodb
  1. 分布式
  2. 鬆散資料結構(json)
  3. 查詢語言強大
文檔

你可以看做是一個dict,dict裡面還可以嵌套dict,例如:

  1. {"name": "alan", score_list: {"chinese": 90, "english": 80}}
集合

一組文檔,就是一堆dict。

資料庫

多個集合組成資料庫

這麼理解:你可以把mongodb看做一個圖書館,圖書館中每本書就是文檔,一個書架上的書是個集合,每個圖書室的書架加起來就是個資料庫。

安裝

官方安裝方法 
學我教程的同學應該都知道,我不會給出具體步驟,鼓勵大家按照官方文檔去摸索,屏蔽伸手黨。

該如何把抓取到的資料存入mongodb
  1. 把抓到的資料寫成你想要的dict形式
  2. insert到指定的書架上
  3. 沒了。。。
增刪查改例子 python2版本

需要安裝pymongo

  1. pip install pymongo

mongo_api.py

  1. # -*- coding: utf-8 -*-
  2. # Define your item pipelines here
  3. #
  4. # Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
  5. # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  6. import pymongo
  7. import sys
  8. import unittest
  9. reload(sys)
  10. sys.setdefaultencoding(‘utf-8‘)
  11. class MongoAPI(object):
  12. def __init__(self, db_ip, db_port, db_name, table_name):
  13. self.db_ip = db_ip
  14. self.db_port = db_port
  15. self.db_name = db_name
  16. self.table_name = table_name
  17. self.conn = pymongo.MongoClient(host=self.db_ip, port=self.db_port)
  18. self.db = self.conn[self.db_name]
  19. self.table = self.db[self.table_name]
  20. def get_one(self, query):
  21. return self.table.find_one(query, projection={"_id": False})
  22. def get_all(self, query):
  23. return self.table.find(query)
  24. def add(self, kv_dict):
  25. return self.table.insert(kv_dict)
  26. def delete(self, query):
  27. return self.table.delete_many(query)
  28. def check_exist(self, query):
  29. ret = self.get(query)
  30. return len(ret) > 0
  31. # 如果沒有 會建立
  32. def update(self, query, kv_dict):
  33. ret = self.table.update_many(
  34. query,
  35. {
  36. "$set": kv_dict,
  37. }
  38. )
  39. if not ret.matched_count or ret.matched_count == 0:
  40. self.add(kv_dict)
  41. elif ret.matched_count and ret.matched_count > 1:
  42. self.delete(query)
  43. self.add(kv_dict)
  44. class DBAPITest(unittest.TestCase):
  45. def setUp(self):
  46. self.db_api = MongoAPI("127.0.0.1", # 圖書館大樓地址
  47. 27017, # 圖書館門牌號
  48. "test", # 一號圖書室
  49. "test_table") # 第一排書架
  50. def test(self):
  51. db_api = self.db_api
  52. db_api.add({"url": "test_url", "k": "v"})
  53. self.assertEqual(db_api.get_one({"url": "test_url"})["k"], "v")
  54. db_api.update({"url": "test_url"}, {"url_update": "url_update"})
  55. ob = db_api.get_one({"url": "test_url"})
  56. self.assertEqual(ob["url_update"], "url_update")
  57. db_api.delete({"url": "test_url"})
  58. self.assertEqual(db_api.get_one({"url": "test_url"}), None)
  59. if __name__ == ‘__main__‘:
  60. unittest.main()

 

上一篇

 

【爬蟲】把抓到資料存起來——爬蟲絕配mongodb

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.