内容简介:方法一方法二方法三
PyMongo
pip instal pymongo
pymongo 使用
from pymongo import MongoClient
client = MongoClient() # 默认本机什么都不用添加
client = MongoClient('mongodb://@IP:PORT')
client = MongoClient('mongodb://用户名:密码@IP:PORT')
初始化数据与集合
方法一
from pymongo import MongoClient client = MongoClient() database = client.db1 # 库 collection = db1.spider # 集合
方法二
from pymongo import MongoClient client = MongoClient() database = client['db1'] collection = database['spider']
方法三
databast_name_list = ['db1','db2','db3']
for each_db in database_name_list:
database = client[each_db]
collection = database.test
插入数据
from pymongo import MongoClient
client = MongoClient()
database = client['db1']
collection = database['spider']
data = {'id':'123', 'name':'username01','age':20}
collection.insert(data)
more_data = [{数据1},{数据2}] # 插入多个数据
collection.insert(more_data)
普通查找
find(查询语句,返回字段)
find_one(查询语句,返回字段)
content = collection.find() # 不加参数, 显示所有
content = collection.find({'age':20})
content = collection.find({'age':20}, {'_id':0, 'username':1,'age':1}) # 第二个参数指定返回的内容. 这个参数是个字典, key 是字段名称, value是0或1, 0表示不返回这个字段, 1表示返回的字段. 其中_id 比较特殊, 必须人工知道你个值为0, 这样才不会返回. 对于其他数据,应该统一使用返回或者不返回
逻辑查询
- $gt 大与
- $lt 小于
- $gte 大于等于
- $lte 小于等于
- $eq 等于
- $ne 不等于
collection.find({'age':{'$gt':20}}) # 查询 age>20的记录
collection.find({'age':{'$gte':20,'$lte':40}}) # 查询20≤age≤40
查询结果排序
collection.find().sort('列名',1或-1) # 1表示升序,-1表示降序
collection.find({'age':{'$gte':20,'$lte':40}}).sort('age',1)
更新记录
collection.update_one(参数1, 参数2)
collection.update_many(参数1, 参数2)
# 将第一个年龄为20的人, 改名字
collection.update_one({'age':20}, {'$set':{'name':'username01'}})
# 将所有年龄为20的人, 改年龄
collection.update_many({'age':20}, {'$set':{'age':40}})
删除记录
collection.delete_one(参数)
collection.delete_many(参数)
collection.delete_one({'age':20}) # 删除一条
collection.delete_many({'age':20}) # 删除所有符合条件的
查询结果去重
collection.distinct(列名)
# 查询有多少个不同年龄的人
collection.distinct('aget')
交互环境的使用
keys *
- lpush 从左侧写数据到列表中
- lpop 从左侧读取数据
- rpush
- rpop
- llen 查看列表的长度
- lrange key start end # lrange test 0 3 读取下标 0-1-2-3 四个
lpush key value1 value2 ...
eg:
127.0.0.1:6379> lpush c6 "url" (integer) 1 127.0.0.1:6379> lpush test "hello" "world" (integer) 2 127.0.0.1:6379> lpop test "world"
与 python 一样, 没有顺序, 值不重复
sadd key value1 value2 value3 ... 127.0.0.1:6379> sadd test_set "https://baidu.com" (integer) 1 127.0.0.1:6379> sadd test_set 1 2 3 4 5 6 7 7 7 7 (integer) 7 # spop key count 127.0.0.1:6379> spop test_set # 省略 count , 读一个 "4" 127.0.0.1:6379> spop test_set 4 # 4代表读多少个值 1) "3" 2) "6" 3) "2" 4) "https://baidu.com"
redis-py
pip install redis
import redis
client = redis.StrictRedis()
client = redis.StrictRedis(host='192.168.1.100', port=6379, password='123456')
client.lpush('c6', 123) # 列表左侧添加一个数字
client.llen('c6') # 长度
value = client.lpop('c6') # 从列表右侧读一个值
client.sadd('test_set', 'www.baidu.com') # 集合里添加一个网址
url = client.spop('test_set') # 读一个值
length=client.scard('test_set') # 集合的长度
import json json_str = json.dumps(dict, indent=4) # dict -> json, 或 包含字典的列表 -> json json_dict = json.loads(str) # json -> dict
selenium
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('chromedriver')
url = "https://www.baidu.com"
driver.get(url)
try:
# WebDriverWait(driver,
# 30).until(EC.presence_of_element_located((By.CLASS_NAME,"site-description")))
# WebDriverWait(driver, 30).\
# until(EC.presence_of_element_located((By.CLASS_NAME,
# "s_btn")))
# By.ID
# By.NAME
# By.XPATH
WebDriverWait(driver, 30).\ #等30s,直到出现 id为 su的元素
until(EC.presence_of_element_located((By.ID, 'su')))
except Exception as e:
print("网页太慢", e)
html = driver.page_source # 获取源码
element = driver.find_element_by_id("su")
element = driver.find_element_by_name("ie")
element_list = driver.find_elements_by_id("su")
element_list = driver.find_elements_by_name("ie")
element = driver.find_element_by_xpath('//input[@id="su"]')
element = driver.find_elements_by_xpath('//input[@id="su"]')
comment = driver.find_element_by_xpath('//*[@id="qrcode"]/div/div[2]/p/b')
print(comment.text) # text 获取文本
driver.quit() # 退出
以上所述就是小编给大家介绍的《python 爬虫开发从入门到实践 读书笔记(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 爬虫入门到精通-网页的下载
- php 网站爬虫入门 - Goutte
- Python爬虫天气预报(小白入门)
- Python爬虫天气预报(小白入门)
- 爬虫入门之scrapy模拟登陆(十四)
- 简洁全面的Scrapy爬虫技术入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++ How to Program (5th Edition) (How to Program)
Harvey & Paul) Deitel & Associates / Prentice Hall / 2005-01-05 / USD 98.00
With over 250,000 sold, Harvey and Paul Deitel's C++ How to Program is the world's best-selling introduction to C++ programming. Now, this classic has been thoroughly updated! The Deitels' groundbreak......一起来看看 《C++ How to Program (5th Edition) (How to Program)》 这本书的介绍吧!