1.不能使用src地址重下載方法。因為圖片的src獲取的是一個動態圖片,每次獲取得到的是當前時間的時間戳,所以每次請求的圖片都是不一樣的
2.不能使用截圖方法,因為原始圖片解析度是800*800像素的圖片,而在瀏覽器中這個圖片顯示在一個50*50的框架中,所以截圖只能得到50*50的解析度,不能滿足解析度的需求
請牛人指教
uj5u.com熱心網友回復:
問題很難嗎?uj5u.com熱心網友回復:
這樣的話只能使用requests或selenium爬取了,就是發送請求后對于回傳的圖片鏈接通過src值下載(瀏覽器就是這樣作業的,根據回傳的內容中的鏈接再次發送請求),這樣一來下載的圖片就是第一次顯示的圖片,而不是瀏覽器顯示圖片后再發請求重新下載(這是第二次請求這個圖片)。第1條中提到的動態圖片,如果是只gif的話可以通過工具將gif中每幀圖片都提取出來,看看哪個是你需要的,如果是只后臺對于每次請求都輪流提供一個圖片,那可以分析一下每次都提供哪個圖片,然后發送多次請求只保存對應的那次請求的圖片。直接加載到記憶體的話,看看python中沒有直接從url加載圖片的庫吧。uj5u.com熱心網友回復:
你說的辦法不行。例如
src 為 https://login.sina.com.cn/cgi/pin.php?r=10914609&s=0&p=tc-495d730ab3f1cd4ac64bfdb958f210a54f13
src沒有改變,但是每次請求回來的圖片都是不同的
uj5u.com熱心網友回復:
這個是因為回傳的內容是通過base64編碼了,在服務器端動態生成圖片,經過base64加密后變為字串隨html檔案一起發送到客戶端,然后瀏覽器會自動解碼顯示,所以src雖然一樣,但顯示內容不一樣(每次都動態生成)。
你可以通過F12開發人員工具中的Source視窗看到每次回傳的字串都不一樣,我用這個在線工具http://imgbase64.duoshitong.com/解碼看了一下,和頁面顯示的圖片一樣,注意需要添加前綴data:image/png;base64,。
這樣的話你可以嘗試讀取html檔案中這個圖片的base64編碼然后解碼(python好像自帶這個解碼包),不要通過瀏覽器,用requests包來獲取response,response中的內容是原始內容,里面會包含這個圖片的編碼。另外,你發的這個新浪驗證碼例子可能不太合適,因為驗證碼畢竟很小,base64編碼不大,而且動態生成也很容易,如果是照片等大圖片,服務器不能隨機生成啊,最多是后臺隨機選擇照片然后base64編碼一下發送。uj5u.com熱心網友回復:
這樣的話只能使用requests或selenium爬取了,就是發送請求后對于回傳的圖片鏈接通過src值下載(瀏覽器就是這樣作業的,根據回傳的內容中的鏈接再次發送請求),這樣一來下載的圖片就是第一次顯示的圖片,而不是瀏覽器顯示圖片后再發請求重新下載(這是第二次請求這個圖片)。第1條中提到的動態圖片,如果是只gif的話可以通過工具將gif中每幀圖片都提取出來,看看哪個是你需要的,如果是只后臺對于每次請求都輪流提供一個圖片,那可以分析一下每次都提供哪個圖片,然后發送多次請求只保存對應的那次請求的圖片。直接加載到記憶體的話,看看python中沒有直接從url加載圖片的庫吧。
你說的辦法不行。例如
src 為 https://login.sina.com.cn/cgi/pin.php?r=10914609&s=0&p=tc-495d730ab3f1cd4ac64bfdb958f210a54f13
src沒有改變,但是每次請求回來的圖片都是不同的
這個是因為回傳的內容是通過base64編碼了,在服務器端動態生成圖片,經過base64加密后變為字串隨html檔案一起發送到客戶端,然后瀏覽器會自動解碼顯示,所以src雖然一樣,但顯示內容不一樣(每次都動態生成)。
你可以通過F12開發人員工具中的Source視窗看到每次回傳的字串都不一樣,我用這個在線工具http://imgbase64.duoshitong.com/解碼看了一下,和頁面顯示的圖片一樣,注意需要添加前綴data:image/png;base64,。
這樣的話你可以嘗試讀取html檔案中這個圖片的base64編碼然后解碼(python好像自帶這個解碼包),不要通過瀏覽器,用requests包來獲取response,response中的內容是原始內容,里面會包含這個圖片的編碼。另外,你發的這個新浪驗證碼例子可能不太合適,因為驗證碼畢竟很小,base64編碼不大,而且動態生成也很容易,如果是照片等大圖片,服務器不能隨機生成啊,最多是后臺隨機選擇照片然后base64編碼一下發送。
請問如何將這個base64的字串加載到記憶體
uj5u.com熱心網友回復:
這樣的話只能使用requests或selenium爬取了,就是發送請求后對于回傳的圖片鏈接通過src值下載(瀏覽器就是這樣作業的,根據回傳的內容中的鏈接再次發送請求),這樣一來下載的圖片就是第一次顯示的圖片,而不是瀏覽器顯示圖片后再發請求重新下載(這是第二次請求這個圖片)。第1條中提到的動態圖片,如果是只gif的話可以通過工具將gif中每幀圖片都提取出來,看看哪個是你需要的,如果是只后臺對于每次請求都輪流提供一個圖片,那可以分析一下每次都提供哪個圖片,然后發送多次請求只保存對應的那次請求的圖片。直接加載到記憶體的話,看看python中沒有直接從url加載圖片的庫吧。
你說的辦法不行。例如
src 為 https://login.sina.com.cn/cgi/pin.php?r=10914609&s=0&p=tc-495d730ab3f1cd4ac64bfdb958f210a54f13
src沒有改變,但是每次請求回來的圖片都是不同的
這個是因為回傳的內容是通過base64編碼了,在服務器端動態生成圖片,經過base64加密后變為字串隨html檔案一起發送到客戶端,然后瀏覽器會自動解碼顯示,所以src雖然一樣,但顯示內容不一樣(每次都動態生成)。
你可以通過F12開發人員工具中的Source視窗看到每次回傳的字串都不一樣,我用這個在線工具http://imgbase64.duoshitong.com/解碼看了一下,和頁面顯示的圖片一樣,注意需要添加前綴data:image/png;base64,。
這樣的話你可以嘗試讀取html檔案中這個圖片的base64編碼然后解碼(python好像自帶這個解碼包),不要通過瀏覽器,用requests包來獲取response,response中的內容是原始內容,里面會包含這個圖片的編碼。另外,你發的這個新浪驗證碼例子可能不太合適,因為驗證碼畢竟很小,base64編碼不大,而且動態生成也很容易,如果是照片等大圖片,服務器不能隨機生成啊,最多是后臺隨機選擇照片然后base64編碼一下發送。
請問如何將這個base64的字串加載到記憶體
你在response中讀取這個字串時(將它賦值給一個變數)這個字串就在記憶體中了啊,其實response的整個內容都是在記憶體中的。你將這個字串解碼后還是在記憶體中,除非你將它保存到檔案中,這樣才會寫回磁盤。這個鏈接https://www.jianshu.com/p/30f8b1e69b5a里面寫了一段代碼圖片和字串互相轉換。
uj5u.com熱心網友回復:
我也遇到這個問題,不能用requests來獲取圖片,因為盡管相同的cookie,回傳的圖片也不一樣。請問你是怎么解決的呢?轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/115259.html
上一篇:Python小白求問!
