一、PyMySQL库介绍
PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。本质上就是一个套接字客户端,只不过这个套接字客户端是在python程序中用的。
二、安装和使用
1.安装
pip install pymysql
2.方法
pymysql.connect()参数说明:(连接数据库时需要添加的参数)
host(str): MySQL服务器地址
port(int): MySQL服务器端口号
user(str): 用户名
passwd(str): 数据库密码
db(str): 数据库名称
charset(str): 连接编码
connect()对象支持的方法:
cursor() 使用该连接创建并返回游标
commit() 提交当前事务
rollback() 回滚当前事务
close() 关闭连接
cursor对象支持的方法:
execute(op) 执行一个数据库的查询命令
fetchone() 取得结果集的下一行
fetchmany(size) 获取结果集的下几行
fetchall() 获取结果集中的所有行
rowcount() 返回数据条数或影响行数
close() 关闭游标对象
3.使用
连接
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(
host=“你的数据库地址”,
user=“用户名”,
password=“密码”,
database=“数据库名”,
charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
# 得到一个可以执行SQL语句并且将结果作为字典返回的游标
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定义要执行的SQL语句
sql = "INSERT INTO URL(url) VALUES (%s)"
# 执行SQL语句
cursor.execute(sql)
# 关闭光标对象
cursor.close()
# 关闭数据库连接
conn.close()
相关增删查改不再做说明,自己处理数据并添加修改sql命令即可。
附:爬虫爬取京东商品各详情页Url并插入mysql数据库代码
(为确保安全,mysql.connect内容已删除)
(mysql需先建立相关库和表)
(需要配置webdriver,方法链接:
selenium + cromedriver配置方法
)
from selenium import webdriver
from lxml import etree
import time
import pymysql
urls = []
# 使用selenium模拟人为访问页面,获取数据
def spider_jd(url):
# ChromeOptions() 函数中有谷歌浏览器的一些配置
options = webdriver.ChromeOptions()
# 告诉谷歌这里用的是无头模式
options.add_argument('headless')
# 创建谷歌浏览器对象
driver = webdriver.Chrome('D:\Anaconda3\envs\Python\chromedriver.exe')
# 打开谷歌浏览器,进入指定网址的页面
driver.get(url)
# 模拟下拉页面动作,是动态页面加载
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
# 停顿2.5秒等待页面加载完毕!!!(必须留有页面加载的时间,否则部分浏览器获得的源代码会不完整。)
time.sleep(2.5)
# 相当于 request.get(url, headers=header)
source = driver.page_source
# 构造了一个XPath解析对象并对HTML文本进行自动修正。
html1 = etree.HTML(source)
# 提取href
href = html1.xpath('//div[@class="p-img"]/a/@href')
# 仅保存前60个值,k值每次循环自增60
for hr in href:
if hr[:6] != 'https:': # 判断是否为https:开头项,为否则添加https:头
urls.append('https:' + hr)
else:
urls.append(hr)
del urls[k:]
driver.close() # 爬取完毕关闭浏览器
def create():
try:
db = pymysql.connect(host = "x.x.x.x", user = "root", password = "***", database = "SPIDER_URL", charset="utf8") # 连接数据库
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("DROP TABLE IF EXISTS URL")
sql = 'CREATE TABLE URL(url CHAR(50));'
# 执行SQL语句
cursor.execute(sql)
print("连接服务器成功!")
# 关闭光标对象
cursor.close()
# 关闭数据库连接
db.close()
except:
print("连接服务器失败!")
def insert(value):
db = pymysql.connect(host = "x.x.x.x", user = "root", password = "***", database = "SPIDER_URL", charset="utf8")
cursor = db.cursor()
sql = "INSERT INTO URL(url) VALUES (%s)"
try:
cursor.execute(sql, value)
db.commit()
print('插入数据成功!')
except:
db.rollback()
print("插入数据失败!")
db.close()
k = 60
for i in range(1, 2):
url = 'https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&suggest=1.his.0.0&psort=3&page={}&s=61&click=0'.format(
(i * 2) - 1)
spider_jd(url)
k = k + 60
print(urls)
print('共爬取{}条数据,爬取完毕关闭浏览器'.format(len(urls)))
try:
print("正在连接数据库。。。")
create()
print("正在插入数据。。。")
for url1 in urls:
insert(url1)
except BaseException as e:
print(e)