zoukankan      html  css  js  c++  java
  • Python爬虫学习笔记5:数据的存储

    参考:Python3网络爬虫开发实战

    数据存储类型:TXT、 JSON、 csv、MySql、MongoDB、Redis

    5.1 文件存储

    获取知乎发现页面下面的热门话题
    import requests
    from pyquery import PyQuery as pq
    
    url = 'https://www.zhihu.com/explore'
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
    }
    html = requests.get(url,headers=headers).text
    # print(html.text)
    doc = pq(html)
    items = doc('.explore-tab .feed-item').items()  # 这里该如何对应页面代码去找节点还是有点蒙
    for item in items:
        question = item.find('h2').text()
        author = item.find('.author-link-line').text()
        answer = pq(item.find('.content').html()).text()
        file = open('explore.txt','a',encoding='utf-8')
        file.write('
    '.join([question,author,answer]))
        file.write('
    ' + "=" * 50 + '
    ')
        file.close()
    

      

    5.1.2 JSON 文件存储 

    JSON,全称为 JavaScript O同ect Notation, 也就是 JavaScript对象标记 , 它通过对象和数组的组合 米表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式 。

    1. 对象和数组 

    一切都是对象 。

    对象:它在 JavaScript中是使用花括号{}包裹起来的内容,数据结构为{keyl: valuel, key2: value2, ... }的键值对结构。

    数组:数组在 JavaScript 中是方括号 []包裹起来的内容,数据结构为[ ”java”, ”javascript”, "vb'’,.. .]的索引结构 。

    2. 读取 JSON 

    调用 JSON库 的 loads()方法将 JSON 文本字符串转为 JSON对象,可以通过 dumps()方法将 JSON对象转为文本字 符串 

    # 读取json
    import json
    
    str = '''
    [{
        "name":"bob",   # json的数据格式需要使用双引号
        "gender":"male"
    },{
        "a":"1",
        "b":"2"
    }]  # 由于最外层是中括号,所以最终的数据类型是列表
    '''
    print(type(str))
    data = json.loads(str) #loads转化为json对象
    print(data)
    print(type(data))
    data[0]['name'] # 获取内容
    data[0].get('name') # 推荐使用方式,没有不会报错,会返回None,第二个参数可以自定义返回一个默认值


      

    3. 输出 JSON 

    调用 dumps()方法将 JSON对象转化为字符串 

    import json
    
    data = [{
        "1":"1",
        "2":"b"
    }]
    with open("data.json",'w') as file:
        # dumps 将json对象转化为字符串,
        # indent=2保存为json格式
        # ensure_ascii=False,输出中文
        file.write(json.dumps(data, indent=2, ensure_ascii=False))
    

      

    5.1.3 csv文件存储 

    import  csv
    
    with open('data.csv', 'w') as file:
        # delimter 设置分割类型
        # writerows可以写入多行,此时参数就需要为二维列表
        write = csv.writer(file, delimter=' ') # 初始化写入对象
        write.writerow(['id', 'name', 'age'])
    
    # 字典形式
    with open("data.csv",'w') as csvfile:
        filenames = ['id','name','age'] # 先定义字段
        write = write.Dictwriter(csvfile, filenames = filenames)
        write.writerheader() # 先写入表头信息,即filenames
        write.writerow('1','2','3')
    

      

    5.2 关系型数据库存储 

    关系型数据库有多种,如 SQLite、 MySQL、 Oracle、 SQLServer、 DB2等 

    5.2.1 MySQL的存储 

    使用的库是 PyMySQL

    mac用brew安装mysql,设置初始密码  可以使用mysql -u root -p 进行密码连接

    MySQLWorkbench可视化客户端

    quit 退出mysql

    mysql 查看并修改默认端口号

    import pymysql
    
    db = pymysql.connect(host = 'localhost',user='root',password='123456789', port=3306)
    # 获取mysql的操作游标
    cursor = db.cursor()
    # 执行mysql语句
    cursor.execute("select version()")
    # 获取第一条数据
    data = cursor.fetchone()
    # 创建spider数据库
    cursor.execute("create database spider default character set utf8")
    db.close()
    

      

    3. 创建表

    # 创建表
    import pymysql
    
    db = pymysql.connect(host='localhost', user='root',password='123456789',port=3306,bd='spider')
    cursor = db.cursor()
    sql='create table if not exists students(id varchar(255) not null,name varchar(255) not null,' 
        'age int not null,primary_key (id))'
    cursor.execute(sql)
    db.close()
    

      

    4. 插入数据 

    import pymysql
    
    id = 'a'
    name = 'b'
    age = 'c'
    
    db = pymysql.connect(host='localhost', user='root',password='123456789',port='3306',db='spider')
    cursor = db.cursor()
    sql = 'insert into student(id,name,age) values(%s,%s,%s)'
    try:
        cursor.execute(sql,(id,name,age))
        db.commit()
    except:
        db.rollback()
    db.close()
    

      

    5. 更新数据 

    sql =’UPDATE students SET age = %s WHERE name = %s’
    try:
        cursor.execute(sql,(25, ’Bob' ))
        db.commit()
    except:
        db. rollback ()
        db.close()
    

      

    6. 删除数据 

    7. 查询数据 

  • 相关阅读:
    乐动力APP案例
    四则运算题目自动生成
    第0次作业
    CMDB整体项目梳理(1)
    cmdb项目准备
    DjangoAgain CBV与FBV
    Django ORM不完全操作
    Django 查漏补缺记录
    DjangoAgain_用小程序理解web框架
    DjangoAgain_url路由系统
  • 原文地址:https://www.cnblogs.com/zheng1076/p/11132737.html
Copyright © 2011-2022 走看看