欢迎光临
我们一直在努力

爬虫实战 | 把爬取的数据存储到MySQL中

程序设计思路

首先我们通过用户输入ISBN号进行主流网站数据的爬取,然后通过Python操作MySQL创建这个ISBN的表格,最后把相关数据存储进去。

先分析一下我们需要存储的数据:书名、价格、购买地址、店铺名称,链接数据库,创建表,下面是创建表的代码:

# 如果数据表已经存在使用 execute() 方法删除表。
    ISBN = 'ISBN' + str(ISBN)
    cursor.execute("DROP TABLE IF EXISTS "+ISBN)
    # 创建数据表SQL语句
    sql = """CREATE TABLE """ +ISBN+""" (
            `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            `title` VARCHAR(100) NOT NULL,
            `price` VARCHAR(200) NOT NULL,
            `link` VARCHAR(200) NOT NULL,
            `store` VARCHAR(100) NOT NULL )"""
    print(ISBN + '数据库创建成功!')
    cursor.execute(sql)
    print(book_list)

然后分析一下我们要存储的数据,前面我们把数据存储成了字典数据的形式,我们先对数据进行遍历,拿到对应字典,然后设置sql语句,把字典内的数据插入进去:

    for book in book_list:
        sql_inset = "INSERT INTO {ISBN} (`title`,`price`,`link`,`store`) VALUE('{title}','{price}','{link}','{store}');".format(ISBN = ISBN,title=book['title'],price=str(book['price']),link=book['link'],store=book['store'])
        try:
            # 执行SQL语句
            cursor.execute(sql_inset)
            # 如成功执行,则进行保存数据库
            conn.commit()
        except:
            conn.rollback()  # 回滚,如果出现错误则不进行修改

大功告成!最后我们整体装成一个函数,方便主函数后面调用,这里要想函数里传参,一个是用户输入的ISBN,我们把ISBN加上ISBN值做表名,另一个是我们需要插入的数据,这些数据来自之前爬虫获取到的:

import MySQLdb

def conn(ISBN,book_list):
    try:
        conn= MySQLdb.connect(
                host='地址',
                port = 端口,
                user='用户名',
                passwd='密码',
                db ='数据库名称',
                charset='utf8'
                )
    except MySQLdb.Error as e:
        print('Error:%s' % e)
    # 使用cursor()方法获取操作游标
    cursor = conn.cursor()

    # 如果数据表已经存在使用 execute() 方法删除表。
    ISBN = 'ISBN' + str(ISBN)
    cursor.execute("DROP TABLE IF EXISTS "+ISBN)
    # 创建数据表SQL语句
    sql = """CREATE TABLE """ +ISBN+""" (
            `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            `title` VARCHAR(100) NOT NULL,
            `price` VARCHAR(200) NOT NULL,
            `link` VARCHAR(200) NOT NULL,
            `store` VARCHAR(100) NOT NULL )"""
    print(ISBN + '数据库创建成功!')
    cursor.execute(sql)
    print(book_list)

    for book in book_list:
        #cursor = conn.cursor()
        sql_inset = "INSERT INTO {ISBN} (`title`,`price`,`link`,`store`) VALUE('{title}','{price}','{link}','{store}');".format(ISBN = ISBN,title=book['title'],price=str(book['price']),link=book['link'],store=book['store'])
        try:
            # 执行SQL语句
            cursor.execute(sql_inset)
            # 如成功执行,则进行保存数据库
            conn.commit()
        except:
            conn.rollback()  # 回滚,如果出现错误则不进行修改

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

主函数代码如下:

from spider_dangdang import spider as dangdang
from  spider_jd import  spider as jd
from spider_yhd import spider as yhd
from mysql import conn as conn
import MySQLdb
#9787544285148
def main(ISBN):
    """图书比价工具"""
    book_list = []
    #当当网
    dangdang(ISBN,book_list)
    print('当当网数据爬取完成')
    #1号店
    yhd(ISBN, book_list)
    print('1号店数据爬取完成')
    #京东网
    jd(ISBN, book_list)
    print('京东网数据爬取完成')
    # 开始排序
    book_list = sorted(book_list, key=lambda item: float(item["price"]))
    # for book in book_list:
    #     print(book)
    return book_list
    print('--------------')


if __name__ == '__main__':
    ISBN = input('请输入ISBN:')
    book_list = main(ISBN)
    #执行数据库自定义函数
    conn = conn(ISBN,book_list)

当当网、京东、一号店的爬虫代码在前面,没有做任何修改,感兴趣的可以回去看看!

赞(0) 打赏
未经允许不得转载:散人研 » 爬虫实战 | 把爬取的数据存储到MySQL中
分享到: 更多 (0)

评论 抢沙发

7 + 3 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏