python连接nosql(MongoDB)

python连接mongodb,爬取数据写入数据库,并进行简单的增删改

import pymongo
import requests
from lxml import etree
url = 'https://s.weibo.com/top/summary?cate=realtimehot'
header_ = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36',
    'Cookie': 'SUB=_2AkMV0PNUf8NxqwJRmfsUz2vjboh0ygrEieKjjAKPJRMxHRl-yT92qh0StRB6PlDdu42DjoC0nNkD6Q3HPBUGOIysoz5y; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WhZdXZMae23WdvSsjjxMeS5; _s_tentry=passport.weibo.com; Apache=3199196880074.053.1653374051270; SINAGLOBAL=3199196880074.053.1653374051270; ULV=1653374051276:1:1:1:3199196880074.053.1653374051270:',
    'Referer': 'https://passport.weibo.com/'
}
res_ = requests.get(url,headers = header_)
data_ = res_.text
# print(data_)
html_obj = etree.HTML(data_)
top_ = html_obj.xpath('//*[@id="pl_top_realtimehot"]/table/tbody/tr[1]/td[2]/a/text()')[0] # 置顶微博

data_list = html_obj.xpath('//td/span/preceding-sibling::a/text()') #微博热搜前50


con = pymongo.MongoClient('localhost' ,27017 ,username="", password="") #连接数据库
db = con.test_admin #连接test_admin这个database
table = db.weiboresou #连接集合,没有自动新建

# 获取数据库中的所有集合名称
# print(db.list_collection_names())
sum = 0
table.insert_one({'id': sum, 'content': top_}) # 插入微博置顶热搜,编号为0
for index in data_list:#插入微博热搜前50条
    sum = sum + 1
    k = {'id': sum , 'content': index}
    table.insert_one(k)
#查看插入元素
#
# for i in table.find(): # 注意:不能直接print(table.find()),table.find()类型是游标,应该迭代返回。
#     print(i)

# mongodb条件查询:
'''
> : $gt
< : $lt
>= : $gte
<= : $lte
$in:(m,n,) : 提取在指定内容中的数据
$all[n,m,...]: 查找数据库中某一条数据是否全部包含all中的数据, 如果'全部'包含则返回该条数据,否则不反悔
$push: 向已有数据源中按照字段进行数据的添加.基于'列表'
$pop: 将数据库中对应数据的某一个字段数据按照指定方式进行删除. 其中 -1:从列表的起始位置开始删除; 1: 从列表的最后位置开始删除
$pull: 将对应数据中指定的数据分布进行删除(按值删除)
$or : 或者指令, 该指令通常作为字典的键, 其对应的值是一个'列表'结构,列表中每一个元素之间是'并列'的关系.
"在字典中所有的键值对之间代表的是一种'并且'的关系."
.sort('age',1): 将查找之后的结果按照指定的字段进行排序, 1为升序,-1为降序
.skip(m).limit(n): 将查找结果的取值显示为,跳过m条数据,显示n条数据.  即只显示m+1~m+1+n的数据
'''

简单查询

import pymongo

con = pymongo.MongoClient('localhost' ,27017 ,username="", password="") #连接数据库
db = con.test_admin #连接test_admin这个database
table = db.weiboresou #连接集合,没有自动新建

num = input("查找前n条热搜,输入 n = ")# 查询

ask = { "id":{"$lte": int(num) } }
for i in table.find(ask):
    print(i)

python中

插入:table.insert_one(data)
查询:table.find(条件) 该返回的是游标类型,需要迭代输出

mongodb shell中

插入:db.tablename.insert({ id:2,type:“off”, … })
清空:db.tablename.remove({})
查询:db.tablename.find({条件})

show dbs查看所有数据库

db.clothes.find({ price:{$gte:200} }) #查询大于等于200元的

db.clothes.count({ type:“T-shirt” }) #单一聚集,查询类型为T-shirt类型的衣服数量

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值