# 將獲取到的章節信息(章節名,章節鏈接)全部保存到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文件中就沒有問題了。
我對編碼還有字符集的瞭解十分膚淺,文中若有錯誤請原諒,若對編碼想要有更深的瞭解,可以參考維基百科和給出的知乎鏈接中梁海的評論。