python 爬虫开发从入门到实践 读书笔记(二)

栏目: Python · 发布时间: 5年前

内容简介:方法一方法二方法三

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 爬虫开发从入门到实践 读书笔记(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python灰帽子

Python灰帽子

[美] Justin Seitz / 丁赟卿 译、崔孝晨 审校 / 电子工业出版社 / 2011-3 / 39.00元

《Python灰帽子》是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍。老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel为这本书担任了技术编辑一职。书中绝大部分篇幅着眼于黑客技术领域中的两大经久不衰的话题:逆向工程与漏洞挖掘,并向读者呈现了几乎每个......一起来看看 《Python灰帽子》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器