安装参考
下载地址
https://blog.csdn.net/qq_27378621/article/details/80933354
https://www.cnblogs.com/zhoulifeng/p/9429597.html
注意要手动设置文件存储地方
基本命令
参考:https://docs.mongodb.com/master/core/index-unique/
mongodb 设置 unique key
db.members.createIndex( { "user_id": 1 }, { unique: true } )
删除索引
db.test.dropIndex("_id_")
为数据库创建一个用户
> use taobao
switched to db taobao
> db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.auth("testuser","testpass")
1
首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用 db.createUser() 命令来创建用户,其中角色名为 “readWrite”。
普通的数据库用户角色有两种,read 和 readWrite。顾名思义,前者只能读取数不能修改,后者可以读取和修改。
查看用户
show users
数据导入导出
MongoDB的导出功能
mongoexport -h dbhost -d dbname -c collectionName -o output
参数说明:
-h 数据库地址
-d 指明使用的库
-c 指明要导出的集合
-o 指明要导出的文件名(文件支持多种格式,如txt,wps,xls等)
具体示例:
mongoexport -h localhost -d taobao -c product -o D:/taobao.josn
mongoexport -h localhost -d taobao -c product -o D:/taobao.csv
MongoDB的导入功能
导入数据可以使用命令:
mongoimport -h dbhost -d dbname -c collectionname input
参数说明:
-h 数据库地址
-d 指明使用的库
-c 指明要导入的集合(mongodb本身支持隐式创建,故事先无需创建集合)
input 文件的地址
具体示例:
mongoexport -h localhost -d taobao -c product -o D:/taobao.josn
爬虫实例
以上次爬取的天猫美食为例:
from selenium import webdriver
import re
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import time
from lxml import etree
from time import sleep
import random
import pymongo
#from pyquery import PyQuery as pq
from selenium.webdriver.support import expected_conditions as EC
chrome_driver = r"D:\Python\Anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe"
browser = webdriver.Chrome(executable_path=chrome_driver)
wait=WebDriverWait(browser,3)
##配置mongodb数据库
MONGO_URL = 'localhost'
MONDB_DB = 'taobao'
MONGO_TABLE = 'product'
client=pymongo.MongoClient(MONGO_URL)
db=client[MONDB_DB]
def search():
browser.get('https://www.taobao.com')
browser.find_element_by_name('q').send_keys('美食')
sleep(2)
browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click() ##搜索按钮
browser.find_element_by_xpath('//*[@class="forget-pwd J_Quick2Static"]').click() #点击密码登录
sleep(3)
browser.find_element_by_xpath('//*[@id="J_OtherLogin"]/a[1]').click() #点击微博登录
sleep(3)
browser.find_element_by_name('username').send_keys('13183107978')
browser.find_element_by_name('password').send_keys('why19960628')
#a=input('请输入验证码:',)
#browser.find_element_by_name('verifycode').send_keys(a)
browser.find_element_by_xpath('//*[@id="pl_login_logged"]/div/div[7]/div[1]/a').click()
sleep(2)
#browser.find_element_by_xpath('//*[@id="J_SearchForm"]/button').click() ##搜索
#sleep(3)
total=browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]')
print(total.text)
sleep(3)
get_products(1)#第一页
return total.text
def database(result):
try:
if db[MONGO_TABLE].insert(result):
print('存储成功',result)
except Exception:
print('失败!!!',result)
def get_products(page):
price = browser.find_elements_by_xpath('//div[@class="price g_price g_price-highlight"]/strong')
title = browser.find_elements_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div/div[2]/div[2]/a')
place = browser.find_elements_by_xpath('//div[@class="row row-3 g-clearfix"]/div[2]')
buy_num = browser.find_elements_by_xpath('//div[@class="row row-1 g-clearfix"]/div[2]')
shop=browser.find_elements_by_xpath('//div[@class="shop"]/a/span[2]')
print('第', page, '页,共有---', len(price), '个数据')
prices = []
for i in price:
try:
price1 = i.text
except:
price1 == None
prices.append(price1)
# print(prices)
titles=[]
for i in title:
try:
title1 = i.text
except:
title1==None
titles.append(title1)
# print(titles)
places = []
for i in place:
try:
place1 = i.text
except:
price1 == None
places.append(place1)
# print(places)
buy_nums = []
for i in buy_num:
try:
buy_num1 = i.text
except:
buy_num1 == None
buy_nums.append(buy_num1)
# print(buy_nums)
shops = []
for i in shop:
try:
shop1 = i.text
except:
shop1 == None
shops.append(shop1)
# print(shops)
for i in range(len(price)):
product={
'shop':shops[i],
'buy_num':buy_nums[i],
'price':prices[i],
'title':titles[i],
'place':prices[i]
}
database(product)
print('------------------------------页数-------------------------------------')
存储的数据:
源码放在Github上了