python爬取的数据无法保存到MySQL

通过python爬取的网页数据信息无法保存到MySQL,总显示保存失败是为什么呀,确实爬取到了但是保存不了

img

img

你在这代码下面把sql打印一下看看,具体生成了什么sql,然后复制去数据库执行一下,看看数据库有反应没,另外检查下数据库主键是否自增

img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7632501
  • 这篇博客你也可以参考下:Python爬取论文标题、作者、摘要等信息并存入MySQL--简述爬虫是如何将爬取数据存入MySQL数据库
  • 你还可以看下mysql参考手册中的 MySQL 连接器和API MySQL连接器/Python
  • 除此之外, 这篇博客: python 爬取应届生求职网中的求职信息并存入MySQL数据库中并词云!中的 1,python连接数据库创建表 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 将数据存储到MySQL里面,当然要首先要在数据库创建一张表的,然后表的结构根据自己的数据创建。

    # -*- coding: utf-8 -*-
    #@Project filename:PythonDemo  SpiderJob.py
    #@IDE   :IntelliJ IDEA
    #@Author :ganxiang
    #@Date   :2020/05/07 0007 10:18
    #所需要的库
    import requests
    import parsel
    import time
    import pymysql
    connection =pymysql.connect(host='127.0.0.1',
                                port=3306,
                                user='root',
                                password='1234567',
                                database='spider',
                                charset='utf8')
    def create_table():
        mycursor =connection.cursor()
        #1,表存在则删除
        mycursor.execute("DROP TABLE IF EXISTS job")
        # 2,创建表
        sql = """
            create table job(
            num int(11) NOT NULL AUTO_INCREMENT primary key,
            company varchar(255) DEFAULT NULL,
            positions varchar(255) DEFAULT NULL,
            region varchar(255) DEFAULT NULL,
            data_source  varchar(255) DEFAULT NULL,
            dates  varchar(255) DEFAULT NULL
            )
    """
        try:
            mycursor.execute(sql)
            connection.commit()
            print("创建表成功~")
        except Exception as e:
            print("创建失败~:{}".format(e))
        finally:
            mycursor.close()
            # connection.close() #创建表完成关闭连接,这里后面还用到就将其注释掉,如果只用来创建表创建完成可以开启关闭连接
    
  • 您还可以看一下 王涛老师的150讲轻松学习Python网络爬虫课程中的 MySQL数据库-软件安装和包安装小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析: 根据提供的参考资料,可以看出在爬取数据成功后,是通过使用pymysql库连接到MySQL数据库进行数据存储的。因此,保存失败的原因可能是数据库连接出错或者存储的数据格式有误。

    解决方案: 1. 确保正确安装了pymysql库,可以在Python环境中使用import pymysql来检查是否安装成功。

    1. 检查数据库连接信息是否正确,包括数据库的主机地址、端口号、用户名、密码、数据库名称等,确保与代码中的连接参数一致。可以使用如下代码进行测试连接:
    import pymysql
    
    try:
        connection = pymysql.connect(host='127.0.0.1',
                                    port=3306,
                                    user='root',
                                    password='1234567',
                                    database='spider',
                                    charset='utf8')
        print("连接成功!")
    except Exception as e:
        print("连接失败:", str(e))
    
    1. 检查创建表的SQL语句是否正确,确保表结构与存储的数据对应。可以将创建表的代码放在一个单独的函数中,然后调用该函数进行表的创建。可以参考以下示例代码:
    def create_table():
        mycursor = connection.cursor()
        # 1. 表存在则删除
        mycursor.execute("DROP TABLE IF EXISTS job")
    
        # 2. 创建表的SQL语句
        sql = """
            CREATE TABLE job(
                num INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                company VARCHAR(255) DEFAULT NULL,
                positions VARCHAR(255) DEFAULT NULL,
                region VARCHAR(255) DEFAULT NULL,
                data_source VARCHAR(255) DEFAULT NULL,
                dates VARCHAR(255) DEFAULT NULL
            )
        """
    
        try:
            mycursor.execute(sql)
            connection.commit()
            print("创建表成功!")
        except Exception as e:
            print("创建失败:", str(e))
        finally:
            mycursor.close()
    
    1. 确保爬取到的数据以正确的格式存入到一个列表中,如上文提供的参考资料中的infoList列表。请注意数据的顺序和类型要与表结构中的字段一致。

    2. 将爬取到的数据插入到表中,可以使用executemany()方法批量插入数据。示例代码如下:

    def save_data(data_list):
        mycursor = connection.cursor()
        sql = """
            INSERT INTO job (company, positions, region, data_source, dates)
            VALUES (%s, %s, %s, %s, %s)
        """
    
        try:
            mycursor.executemany(sql, data_list)
            connection.commit()
            print("数据保存成功!")
        except Exception as e:
            print("保存失败:", str(e))
        finally:
            mycursor.close()
    

    以上就是可能导致保存失败的原因和相应的解决方案,根据以上步骤检查和调试,可以帮助你解决保存数据到MySQL数据库失败的问题。

检查数据库有没有连上,表结构(必选字段,类型),主键是否重复,插入的数据里是否有特殊符号,比如说单引号,导致sql拼接后失败