【python数据分析】将爬取的数据保存为csv格式

数据保存为csv格式

  • csv文件
  • python的csv模块
  • 从csv文件读取内容
  • 写入csv文件
  • 运用实例
  • 数据准备
  • 将数据存为字典的形式
  • 存储到csv文件
  • csv文件

    一种用逗号分割来实现存储表格数据的文本文件。

    python的csv模块

    python遍历代码:

    arr = [12, 5, 33, 4, 1]
    #遍历输出1
    for i in range(0, len(arr)):
        item = arr[i]
        print(item)
    
    #遍历输出2
    for item in arr:
        print(item)
    
    #遍历输出3
    string_arr = ["hi", "hello", "你好", "aloha"]
    for item in string_arr:
        print("本次循环 item 变量的值", item)
    

    从csv文件读取内容

    用DictReader对象的创建方法以及通过filenames属性获取csv表格的表头。

    import csv
    #打开csv
    fo = open("info.csv")
    #打开csv文件的文件对象作为参数来创建dictreader类的对象,存在reader变量中
    reader = csv.DictReader(fo)
    #调用reader对象的filednames属性,获取csv文件表格的开头
    headers = reader.fieldnames
    #关闭文件
    fo.close()
    #打印
    print(headers)
    

    获取表格实际内容。

    fo = open("info.csv")
    reader = csv.DictReader(fo)
    #创建列表,存储读到的行
    row_list = []
    #遍历
    for row in reader:
        row_list.append(row)
    fo.close()
    #打印
    print(row_list[0])
    #遍历row_list
    for d in row_list:
        #d是字典,直接打印key为年龄值即可
        print(d["年龄"])
    #打印
    

    写入csv文件

    python提供了DictWriter方法,可以讲表格数据以字典的形式存储到csv文件中。

    import csv
    #打开一个文件,假设是info.csv,写入所以是w
    #newline='',写入时需要指定
    fo = open("info2.csv", "w", newline='')
    #将表头存储到一个列表里
    header = ["姓名", "年龄", "部门"]
    #创建一个DictWriter对象,第二个参数就是上面创建的表头
    writer = csv.DictWriter(fo, header)
    writer.writeheader()
    #写入一行记录,以字典的形式,key需要与表头对应
    writer.writerow({"姓名": "小明", "年龄":"28", "部门": "行政部"})
    #关闭文件
    fo.close()
    

    运行后,相应的文件夹下会出现一个对应的csv文件。

    也可以使用writer.writerows(row_list)来写入多个。

    运用实例

    数据准备

    1、打开网页,读取内容,并创建相应的BeautifulSoup对象
    2、找到包含新闻的div元素列表
    3、从2中抽取标题
    4、从2中抽取时间

    from bs4 import BeautifulSoup
    def create_doc_from_filename(filename):
        fo = open(filename, "r", encoding='utf-8')
        html_content = fo.read()
        fo.close
        doc = BeautifulSoup(html_content)
        return doc
    

    (记得要pip install bs4)

    #输入参数是BeautifulSoup对象,返回包含新闻的div元素列表
    def find_index_labels(doc):
        index_labels = doc.find_all("div", class_ = "indexs")
        return index_labels
    
    #实现新闻标题的抽取函数
    def get_title(label_object):
        #从刚才的参数传入的标签对象中过滤出所有的target = _blank的a标签
        a_labels = label_object.find_all("a", target = "_blank")
        #取得第一个标签对象
        my_label = a_labels[0]
        #将标签的文字内容作为返回值返回
        return my_label.get_text()
    
    #实现获取新闻发布时间的函数
    def get_pub_time(label_object):
        #找到class = comment-link的span标签
        spans = label_object.find_all("span", class_ = "comment-link")
        #取第一个
        span = spans[0]
        #返回标题属性
        return span["title"]
    
    #获取新闻标题与列表
    #调用create_doc_from_filename函数
    doc = create_doc_from_filename("jiandan.html")
    #传入BeautifulSoup对象,将返回的div列表存储在index_labels中
    index_labels = find_index_labels(doc)
    for label_object in index_labels:
        title = get_title(label_object)
        pub_time = get_pub_time(label_object)
        print("标题", title)
        print("发布时间", pub_time)
    

    将数据存为字典的形式

    #获取新闻标题与列表
    #调用create_doc_from_filename函数
    doc = create_doc_from_filename("jiandan.html")
    #传入BeautifulSoup对象,将返回的div列表存储在index_labels中
    index_labels = find_index_labels(doc)
    news_dict_list = []
    for label_object in index_labels:
        title = get_title(label_object)
        pub_time = get_pub_time(label_object)
        news = {"标题": title, "发布时间": pub_time}
        news_dict_list.append(news)
    print(news_dict_list)
    

    存储到csv文件

    #创建csv
    fo = open("news.csv", "w", newline='', encoding='utf-8')
    #表头
    header = ["标题", "发布时间"]
    writer = csv.DictWriter(fo, header)
    #写入表头
    writer.writeheader()
    #将上一步的字典写入csv文件中
    writer.writerows(news_dict_list)
    fo.close()
    

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【python数据分析】将爬取的数据保存为csv格式

    发表回复