python爬虫
此文章大致需要观看十分钟
Python作为现阶段最流行的语言,对于网络的爬取和海量数据的分析,python更胜一筹。
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。在这里我主要介绍一下python操作MySQL、执行SQL语句、获取结果集、遍历结果集、取得谋个字段、获取表字段名、将图片插入数据库、执行事务等各种代码示例和详细介绍。
1、初识数据库
# 连接数据库
from sqlalchemy import create_engine
engine = create_engine(
"mysql+pymysql://root:1990@localhost:3306/test?charset=utf8",
echo=True)
# 创建数据表方法一
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class mytable(Base):
# 表名
__tablename__ = 'mytable'
# 字段,属性
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
age = Column(Integer)
birth = Column(DateTime)
class_name = Column(String(50))
Base.metadata.create_all(engine)
# 创建数据表方法二
from sqlalchemy import Column, MetaData, ForeignKey, Table
from sqlalchemy.dialects.mysql import (INTEGER, CHAR)
meta = MetaData()
myclass = Table('myclass', meta,
Column('id', INTEGER, primary_key=True),
Column('name', CHAR(50), ForeignKey(mytable.name)),
Column('class_name', CHAR(50))
)
myclass.create(bind=engine)
# 删除数据表
#myclass.drop(bind=engine)
#Base.metadata.drop_all(engine)
###########
get_data = session.query(mytable).filter_by(id=1).first()
get_data.class_name = '三年级三班'
session.commit()
session.close()
# 查询myclass全部数据
get_data = session.query(myclass).all()
for i in get_data:
print('我的名字是:' + i.name)
print('我的班级是:' + i.class_name)
session.close()
#################################
get_data = session.query(myclass.name, myclass.class_name).all()
for i in get_data:
print('我的名字是:' + i.name)
print('我的班级是:' + i.class_name)
session.close()
#################################
# 根据条件查询某条数据
# 筛选方法一:
# get_data = session.query(myclass).filter(myclass.id==1).all()
# 筛选方法二:
get_data = session.query(myclass).filter_by(id=1).all()
print('数据类型是:' + str(type(get_data)))
for i in get_data:
print('我的名字是:' + i.name)
print('我的班级是:' + i.class_name)
#################################
get_data = session.query(myclass).filter_by(id=1).first()
print('数据类型是:' + str(type(get_data)))
print('我的名字是:' + get_data.name)
print('我的班级是:' + get_data.class_name)
#################################
get_data = session.query(mytable).filter(mytable.id >= 2,
mytable.class_name == '三年级二班').first()
print('数据类型是:' + str(type(get_data)))
print('我的名字是:' + get_data.name)
print('我的班级是:' + get_data.class_name)
#################################
# 内连接
get_data = session.query(mytable).join(myclass).filter(mytable.class_name == '三年级二班').all()
print('数据类型是:' + str(type(get_data)))
for i in get_data:
print('我的名字是:' + i.name)
print('我的班级是:' + i.class_name)
# 外连接
get_data = session.query(mytable).outerjoin(
myclass).filter(mytable.class_name == '三年级二班').all()
#################################
sql = 'select * from mytable '
session.execute(sql)
# 如果涉及更新,添加数据,需要session.commit()
session.commit()
2、连接本地数据库
import pymongo
# 创建对象,连接本地数据库。
# 方法一:
client = pymongo.MongoClient()
# 方法二:
client = pymongo.MongoClient('localhost', 27017)
# 方法三:
client = MongoClient('mongodb://localhost:27017/')
# 连接DB数据库
db = client['DB']
# 连接集合user,集合类似关系数据库的数据表
# 如果集合不存在,会新建集合user
user_collection = db.user
# 设置文档格式(文档即我们常说的数据)
3、用户验证
import pymongo
# 用户验证方法一
client = pymongo.MongoClient()
db_auth = client.admin
db_auth.authenticate(username, password)
# 连接DB数据库
db = client['DB']
# 用户验证方法二
client = MongoClient('mongodb://username:password@localhost:27017/')
# 连接DB数据库
db = client['DB']
4、数据库读写
import pymongo
import datetime
import re
# 创建对象
client = pymongo.MongoClient()
# 连接DB数据库
db = client['DB']
# 连接集合user,集合类似关系数据库的数据表
# 如果集合不存在,会新建集合user
user_collection = db.user
# 设置文档格式(文档即我们常说的数据)
user_info = {
"_id": 100,
"author": "小黄",
"text": "Python爬虫开发",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}
# 使用insert_one单条添加文档,inserted_id获取写入后id
# 添加文档时,如果文档尚未包含"_id"键,则会自动添加"_id"。 "_id"的值在集合中必须是唯一。
# inserted_id是获取添加后的id,若不需要可去掉。
user_id = user_collection.insert_one(user_info).inserted_id
print ("user id is ", user_id)
#批量添加
user_infos = [{
"_id": 101,
"author": "小黄",
"text": "Python爬虫开发",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()},
{
"_id": 102,
"author": "小黄_A",
"text": "Python爬虫开发_A",
"tags": {"db":"Mongodb", "lan":"Python", "modle":"Pymongo"},
"date": datetime.datetime.utcnow()},
]
# inserted_ids是获取添加后的id,若不需要可直接去掉。
user_id = user_collection.insert_many(user_infos).inserted_ids
print ("user id is ", user_id)