mongodb:非关系型数据、在硬盘上
数据库操作:
-创建
-use 数据库名字 (有则进入,无则创建,如果没有数据,show dbs是看不到的)
-删除
-use config #先切换到要删的库下
-db.dropDatabase() #删除当前库
集合操作(表操作)
-创建
-在表中插入一条数据,就自动创建了
-db在哪个库中,db就是谁
-db.table1.insert({"name":"lqz","age":18})# k可写可不写引号!
-db.table1.insert({"name":"lqz","age":18,"sex":"男"})
-show dbs 这个数据库就能看到了# 可以不省略写为show databases
-show tables 这个表就能看到了
-删除
-db.table2.drop()
数据行,文档操作
-新增
-db.table1.insert({"name":"lqz","age":18})
-先定义出一个对象(字典),db.table1.insert(字典名)
-插入多条
-db.table1.insertMany([user1,user2,user3,user4,user5])# 每一个user都是在上方定义好的,现在没写
-查询
注意,自动生成的id是objectid包括4个部分组成,并不是简单的数字1,2,3
db.table1.find()
-1、select * from db1.user where name = "egon";
db.table1.find({name:"egon"})
-select * from db1.user where name != "alex";
db.table1.find({name:{"$ne":"egon"}})
-不等于,大于,小于,大于等于,小于等于
-$ne $gt $lt $gte $lte
-db.table1.find({"_id":{"$gte":2,}})
-db.table1.find({'_id':{"$mod":[2,1]}})
db.table.find({'_id':{"$not":{"$mod":[2,1]}}})
-db.table1.find({"age":{"$in":[20,30,31]}})
-db.table.find({'name':/^j.*?(g|n)$/i})
-db.table.find({'_id':3},{'_id':0,'name':0,'age':1})
-db.table1.find({"hobbies.3":'tea'})
-db.table1.find({"hobbies.0":'music'})
-db.table1.find({},{'hobbies':{"$slice":-2},"age":1,"_id":0,"name":0,"addr":0})
-db.table1.find({},{'hobbies':{"$slice":-2}})
-db.table1.find({},{'hobbies':{"$slice":[1,2]},})
-db.user.find().sort({"_id":1,})
-db.user.find().sort({'_id':1}).limit(2).skip(4)
-db.table1.find({'age':{"$gt":30}}).count()
12 34 45
修改
-db.user.update({'age':20},{"name":"Wxx","hobbies_count":3}) 覆盖式的
-db.table1.update({'_id':2},{"$set":{"name":"WXX",}}) 不覆盖
-db.table1.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})
-db.table1.update({},
{
"$inc":{"age":-5}
},
{
"multi":true
}
)
select avg(salary) as avg_salary,post from db1.emp where id > 3 group by post having avg_salary > 10000;
'''
用python操作mongodb
#用python操作mongodb
from pymongo import MongoClient
#1、链接
# client=MongoClient('mongodb://root:123@localhost:27017/')
client = MongoClient('localhost', 27017)
#2、use 数据库
db=client['db2'] #等同于:client.db1
# db=client.test
#3、查看库下所有的集合
# print(db.collection_names(include_system_collections=False))#4、创建集合
# table_user=db['table1'] #等同于:db.user
table_user=db.table1
# # #5、插入文档
# import datetime
# user0={
# "_id":1,
# "name":"egon",
# "birth":datetime.datetime.now(),
# "age":10,
# 'hobbies':['music','read','dancing'],
# 'addr':{
# 'country':'China',
# 'city':'BJ'
# }
# }
# user1={
# "_id":2,
# "name":"alex",
# "birth":datetime.datetime.now(),
# "age":10,
# 'hobbies':['music','read','dancing'],
# 'addr':{
# 'country':'China',
# 'city':'weifang'
# }
# }
# res=table_user.insert_many([user0,user1])
# res=table_user.insert_many
# print(res)
# print(table_user.count())
#6、查找
from pprint import pprint#格式化细
# pprint(table_user.find_one())
# for item in table_user.find():
# pprint(item)
# print(table_user.find_one({"_id":{"$gte":1},"name":'egon'}))
# table_user.find()
#7、更新.注意上下两个的区别!
# table_user.update({'_id':1},{'name':'EGON'})
#8、传入新的文档替换旧的文档
table_user.save(
{
"_id":2,
"name":'egon_xxx'
}
)
scrapy
-scrapy
-安装
-pip3 install scrapy
-先装Twisted
-装pywin32
-新建项目
-scrapy startproject 项目名字
-新建爬虫
-scrapy genspider 爬虫名 爬取的域名
-项目目录介绍
-spiders
-所有的爬虫程序
-items.py
-类似于django的model类
-middlewares.py
-中间件
-pipelines.py
-持久化相关
-settings.py
-配置文件
-scrapy.cfg
-部署相关
-运行爬虫
-scrapy crawl cnblogs --nolog(--nolog不打印日志。settings中的robotstxt=False代表不遵守爬虫协议)
-爬取数据
//*[@id="post_list"]/div[1]页面下右键复制
运行爬虫:
注意:两点
代码:
scrapy crawl cnblogs --nolog
robotstxt=False # settings中的robotstxt=False代表不遵守爬虫协议)
右键启动(更目录下新建main.py文件)
from scrapy.cmdline import execute
# execute(['scrapy', 'crawl', 'cnblogs','--nolog'])
execute(['scrapy', 'crawl', 'cnblogs'])
# 注意一定要打印日志,因为他是异步任务,如果程序出错,通过try是不能捕捉的(只能捕捉当前线程)
scrapy内置的数据查找(****)
div_list=response.css('.post_item') #取出class为post_item的所有
# 获取a标签的href属性:a::attr(href)
next_url=response.css('.pager a:last-child::attr(href)').extract_first()
# 获取列表的第一个
url=div.css('.post_item_body a::attr(href)').extract_first()
获取页面的xpath方法:
右键复制即可!,直接可以粘贴过来使用
遇到一个小小的问题:
放css查找代码书写正确,但是部分链接的图片没拿到,可能是网页又刷新了,而我浏览器的网页没有跟进!!!坑点!!