Python爬虫-Pymysql模块

3月 9, 2020

增删改查

import pymysql
# 打开数据库连接
conn = pymysql.connect("数据库链接","数据库用户","数据库密码","数据库表名")
# 使用cursor()方法获取操作游标 
cur = conn.cursor()
sql = "sql语句"
# 使用execute方法执行SQL语句
cur.execute(sql)

# 增-删-改
# 提交到数据库执行
conn.commit()

# 查
cur.fetchone() #获取一个结果集
cur.fetchall() #获取所有结果集
cur.rowcount #返回影响的行数。

# 回滚
conn.rollback()
# 关闭连接
conn.close()

对之前一言爬取的数据存入数据库

#导包
import pymysql
import requests
import json
import random

# 定义函数mysql()
def mysql():
    # 打开数据库链接
    conn = pymysql.connect(
        host='localhost',
        user='python',
        passwd='python',
        db='python',
        charset='utf8')
    return conn

# 定义User-Agent请求头
def user_agent():
    # 用户代理池
    uapools = [
        # Edge Trident内核 on win10
        "Mozilla/5.0 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134",
        # Edge chromium内核 on win10
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36 Edg/80.0.361.54",
        # Chrome on win10
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36",
        # Safari on mac
        "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
        # FireFox on windows
        "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0",
        # Opera on mac
        "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.9.168 Version/11.52"
    ]
    # User-Agent
    ua = uapools[random.randint(0, len(uapools) - 1)]
    return ua

# 定义函数hitokoto()
def hitokoto():
    # 定义url
    url = 'https://v1.hitokoto.cn'
    # 访问url
    data = requests.get(url,headers={'User-Agent' : user_agent()}).text
    # 匹配字段
    txt = json.loads(data)
    res = txt.get("hitokoto")
    return res

# 循环写入数据库
for i in range(50):
    # 调用hitokoto函数
    res = hitokoto()
    # sql语句
    sql = 'INSERT INTO python (content) VALUES ("'+res+'")'
    # 调用mysql函数
    mysqls = mysql()
    # 创建游标对象
    cur = mysqls.cursor()
    # 使用execute方法执行SQL语句
    result = cur.execute('SELECT * FROM python WHERE content="'+res+'"')
    # 使用 fetchone() 方法获取一条数据
    data = cur.fetchone()

    # 与数据库判断
    if result == 0:
        # 异常处理
        try:
            # 当前正在执行
            print('当前正在执行第',i+1,'条','\n',res)
            # 使用execute方法执行SQL语句
            cur.execute(sql)
            # 提交到数据库执行
            mysqls.commit()
        except:
            # 如果发生错误则回滚
            mysqls.rollback()
    else:
        continue

# 关闭数据库连接
mysqls.close()

循环写入数据库部分用删和改实现(单纯为了熟悉语法)

# 与数据库判断①  数据库删除语句(删)
if result != 0:
    # 使用execute方法执行SQL语句
    cur.execute('DELETE FROM python WHERE content="'+res+'"')
    # 提交到数据库执行
    mysqls.commit()
    try:
        # 当前正在执行
        print('当前正在执行第',i+1,'条','\n',res)
        # 使用execute方法执行SQL语句
        cur.execute(sql)
        # 提交到数据库执行
        mysqls.commit()
    except:
        # 如果发生错误则回滚
        mysqls.rollback()
elif result == 0:
    try:
        # 当前正在执行
        print('当前正在执行第',i+1,'条','\n',res)
        # 使用execute方法执行SQL语句
        cur.execute(sql)
        # 提交到数据库执行
        mysqls.commit()
    except:
        # 如果发生错误则回滚
        mysqls.rollback()
else:
    continue

# 与数据库判断①  数据库更新语句(改)
if result != 0:
    # 使用execute方法执行SQL语句
    cur.execute('UPDATE python SET content ="'+res+'"WHERE content ="'+res+'"')
    # 提交到数据库执行
    mysqls.commit()
    continue
elif result == 0:
    try:
        # 当前正在执行
        print('当前正在执行第',i+1,'条','\n',res)
        # 使用execute方法执行SQL语句
        cur.execute(sql)
        # 提交到数据库执行
        mysqls.commit()
    except:
        # 如果发生错误则回滚
        mysqls.rollback()
else:
    continue