首頁 > 軟體

python資料分析之將爬取的資料儲存為csv格式

2022-06-13 14:04:01

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()

總結

到此這篇關於python資料分析之將爬取的資料儲存為csv格式的文章就介紹到這了,更多相關python爬取資料儲存csv格式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com