使用csv存儲爬蟲數據亂碼問題解決

  # 將獲取到的章節信息(章節名,章節鏈接)全部保存到csv文件中。
    with open('Chapters.csv', 'w+') as csvFile:
        writer = csv.writer(csvFile)
        for chapter in chapters:
            writer.writerow((chapter.get_attribute('innerHTML').strip().encode('gbk', 'ignore').decode('gbk'), chapter.get_attribute('href')))

如上是解決錯誤後的程序。

在剛開始寫這部分函數的時候,我犯了幾個很關鍵的錯誤,最讓我頭疼的還是編碼問題,不過最後還是憑藉我自己的思考把問題解決了。下面是我對這幾個錯誤的解讀和解決方案。

隱藏標籤中的文本

如上程序,chapter是一個使用css隱藏的標籤,剛開始我使用了最常規的方法來獲取它的文本內容,也就是

chapter.text

但是我發現,解析出來的信息卻是一個空字符串,最先我懷疑是爬取的頁面源碼出現了問題,但是我使用

driver.page_source

來獲取源碼進行查看時,發現標籤中的信息沒有任何錯誤。同時我發現了該標籤爲隱藏標籤,於是我將這個嘗試了使用

chapter.get_attribute('innerHTML').strip()

來獲取隱藏標籤中的文字(後面的strip函數時爲了讓獲得的信息更加規範,去掉字符串兩邊的空格),此時我就獲得了正確的標籤文本。

儲存到csv中顯示無法儲存

在最開始,我將爬取的文本信息存到csv中使用的代碼爲

 writer.writerow((chapter.get_attribute('innerHTML').strip(), chapter.get_attribute('href')))

這是,解釋器報錯,無法將文本存入csv文件中,當然,是讓人十分頭疼的編碼錯誤。
中文版windows的txt默認使用的是gbk編碼。我將這個作爲突破口,對編碼進行了一些思考。

  • 首先,我爬取的內容是存在於中文網站的,網站使用的編碼經過查證是utf-8編碼。
  • 然後,我知道utf-8字符集大於gbk字符集,這樣,utf-8中的一些字符可能就不能通過gbk編碼方式進行編碼,此時,txt就會無法儲存文本。
  • 那麼,如何過濾掉那些非gbk字符呢,第一步,先通過gbk編碼方式進行編碼,忽略掉出錯的編碼,然後再用gbk進行解碼,這樣寫入到csv文件中就沒有問題了。

    我對編碼還有字符集的瞭解十分膚淺,文中若有錯誤請原諒,若對編碼想要有更深的瞭解,可以參考維基百科和給出的知乎鏈接中梁海的評論。

https://www.zhihu.com/question/20650946

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章