with open(output_filename, "wb") as f:
f.write(html_request.content)
我用這個方法讀寫文件時,卻報錯:IOError: [Errno 2] No such file or directory: './output/http%3A//cup.baidu.com/spider'
我一開始很懵逼,明明這個方法,如果文件不存在的話,會自動創建文件的呀。。。而且,我的一級目錄是存在的啊!
後來報着試一試的心態,我把output_filename改成了『http%3Acup.comspide』試了試,然後運行就通過了!
所以,最後定位到,肯定是文件名裏的 / 未編碼造成的!python會把它當成目錄去尋找,那output下一層的目錄那必然是不存在了。
於是,我就去看了看 output_filename 的生成,如下
output_filename = os.path.join(output_directory, urllib.quote(html))
這一看,我又開始懵逼了,我明明做編碼處理了啊?爲啥/沒處理的
於是又開始百度,結果發現:urllib.quote(string,safe)這個函數是接收兩個字段的,一個是需要編碼的url地址,另一個safe是指定某個字符不被編碼!然後,重點來了,safe默認賦值是『/』
最後,水落石出,更改如下:
output_filename = os.path.join(output_directory, urllib.quote(html, safe='+/'))
就可以了!
輸出就變成了:http%3A%2F%2Fcup.com%2Fspider