問題解決:TypeError: unsupported format string passed to NoneType.__format__

Mr.Q*發表於2020-11-17

寫在前面

  今天看部落格的時候,有位小夥伴反應我之前的文章爬取軟科排名的程式碼不能用了。

軟科大學排名傳送門(11.17更新): https://blog.csdn.net/weixin_44578172/article/details/109340255

於是我又執行了一下之前的程式碼發現確實是不能用了,而且會報錯就是這樣↓

在這裡插入圖片描述

問題分析

  為了幫助各位小夥伴理解,我將上面的報錯翻譯了一下就是這樣的:傳遞給NoneType的格式字串不受支援。

  這是因為我們在對網站內容進行爬取的時候,如果爬取的對應位置沒有內容,python爬蟲獲取的值為 NoneType(<class ‘NoneType’>),又因為format格式化輸出不支援NoneType型別,所以結果當然報錯。

  之後我看了網站的原始碼,發現確實有一些不一樣,就是td標籤中內容之前有了更多的空白(我大意了啊,沒有閃~),如下圖:

在這裡插入圖片描述

  發現了這一點爬蟲人的警覺性湧上來了。我們知道string方法的作用是用來獲取目標路徑下第一個非標籤字串,得到的是個字串(不知道的小夥伴現在也知道了哈),但現在前面有很多空白,所以.string之後我們得到的也就是空白即NoneType。好了,現在我們知道問題的原因了,那麼解決方案如下

問題解決

  用text方法代替string方法即可。text的作用是用來獲取目標路徑下的子孫非標籤字串,返回的是字串。然後我們在用.strip方法去掉頭尾空白就可以完美解決了。效果圖如下:

在這裡插入圖片描述
PS:關於string和text的區別,不太明白的小夥伴可以再查一查資料,我後面也會再整理些資料把text,get_text,string,strings等的區別給大家一一介紹

  本篇完,如有錯誤歡迎指出~

相關文章