先前發文
DAY 01 : 參賽目的與規劃
DAY 02 : python3 virtualenv 建置
DAY 03 : python3 request
DAY 04 : 使用beautifulsoup4 和lxml
DAY 05 : select 和find 抓取tag
DAY 06 : soup解析後 list取值
DAY 07 : request_header_cookie 通過網頁18限制
DAY 08 : ppt內文爬取
DAY 09 : 資料處理 split replace strip
DAY 10 : python csv 寫入 和dict 合併
DAY 11 : python class function
DAY 12 : crawl 框架 scrapy 使用
DAY 13 : scrapy 架構
DAY 14 : scrapy pipeline data insert mongodb
使用pipeline前 先測試一下一般的code是否正常執行
sudo apt-get install mongodb
先準備pymongo pip3 install pymongo
sudo service mongod start
啟動service
在terminal 上打mongo就可進入mongo shell進行操作指令了
show dbs
use 資料庫名稱
show collections
db.資料表名稱.find()
來寫個測試code吧
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["IT_db"]
mycol = mydb["IT_coll"]
mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)
再到mongo shell 查看是否有自動跑出IT_db , 並看到collection裡資料是否存在
就可以開始寫scrapy 的 pipeline了
把前面寫的ppt spider拿出來用 , 先設定 settings.py找到ITEM_PIPELINES 把{}裡預設的
mark(註解)掉 , 並新增' pipeline上一層的目錄名稱.pipelines.MongoDBPipeline': 300,
再加上
MONGODB_URI = 'mongodb://localhost:27017'
MONGODB_DB_NAME = 'IT_db'
MONGODB_DB_COL = 'IT_coll'
並找到pipelines.py 寫mongodb功能
先import pymongo
寫一個mongo功能
class MongoDBPipeline:
print('Pipeline')
def open_spider(self, spider):
db_uri = spider.settings.get('MONGODB_URI')
db_name = spider.settings.get('MONGODB_DB_NAME')
db_coll = spider.settings.get('MONGODB_DB_COL')
db_client = pymongo.MongoClient('mongodb://localhost:27017')
self.coll = db_client[db_name][db_coll]
def process_item(self, item, spider):
self.insert_article(item)
return item
def insert_article(self, item):
item = dict(item)
print(item)
self.coll.insert_one(item)
def close_spider(self, spider):
self.db_client.close()
從昨天的架構圖可以知道 , 跑到pipeline是已經爬完準備後續處理資料或是寫入資料的部份了
從setting 拿取變數 並進行連線 , 把collection給予self.變數(可以給其他function呼叫)
再來process_item接取spider爬完的item
並給 insert_article的function轉成dict格式並寫入資料
之後就可以用基本的mongo shell或是寫個python來check自己的資料是否已寫入
今日歌曲~
與非門与非门 - 茄子